我遇到了一个奇怪的错误。将值赋给数组需要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
即使解决了这个问题,您正在使用的编译器显然不是为引导加载器目标编译而设计的,至少不是用于它的交换机。所以你可能会遇到其他问题。 –