我遇到了一個奇怪的錯誤。將值賦給數組需要memcpy
我正在爲bootloader編寫代碼,所以我沒有很多花哨的庫和所有。
代碼本身是很簡單,這是
int array[32] = { 1, 2, 3, [...snip...], 31, 32 };
此代碼導致無法解析的外部有關問題的memcpy不被鏈接。 但是這個代碼編譯和鏈接精細
int array[12] = { 1, 2, 3, [...snip...], 11, 12 };
事實上,錯誤出現
int array[12] = { 0 };
和
int array[13] = { 0 };
之間
第一個鏈接罰款,但第二不能鏈接。我只是不明白爲什麼在13號時,編譯器突然決定依靠memcpy來做這件事。我嘗試了-O0和-O3。我的編譯器是一個名爲cl470的Windows可執行文件,不太確定它來自哪裏。
另一個奇怪的是,當我把它放在一個函數中時,這是有問題的,但是如果我在全局聲明數組,那麼就沒有問題了。
問題是,可能沒有足夠的堆棧來容納一個13元素的int數組,所以編譯器突然想要將它移動到堆上 - 也許使數組'static'可以解決問題。 – 2012-08-31 18:56:25
哦,+1,因爲這個問題真的沒有意義。 (yupp I <3 Windows) – 2012-08-31 18:56:47
即使解決了這個問題,您正在使用的編譯器顯然不是爲引導加載器目標編譯而設計的,至少不是用於它的交換機。所以你可能會遇到其他問題。 –