注册 登录
编程论坛 C++教室

为什么我的数组元素超过65535后,编译就会报错

高级点灯大师 发布于 2022-08-14 18:04, 1267 次点击
为什么我的数组元素超过65535个后,编译就会报错collect2.exe:ld returned 1 exit status
5 回复
#2
高级点灯大师2022-08-14 18:09
调用的时候会报错,不用也能编译过去
#3
md000000002022-08-14 23:40
我有代码在VC6.0上运行大数组的时候,默认的就容易爆(应该是stack overflow)
代码不想每一次都增大栈分配的内存,于是用new和malloc,然后就不会爆了
#4
rjsp2022-08-15 09:00
VC++默认栈大小只有1M bytes,若想修改栈大小,对于VC++,
你可以在代码中用 #pragma comment(linker, "/STACK:字节大小")
也可以在.def文件用 STACKSIZE statement
也可以在link命令中用 /STACK:reserve[,commit]
甚至只有exe文件,你也可以用VC自带的工具editbin.exe进行修改。

但问题是你是不是一定要在栈中分配大数组?
可以分配在堆中,动态长度的数组,std::vector很合适;定长的,std::unique_ptr<foo[]> p { new foo[3] }; 更好一些。 ------ 推荐这种方法
假如你就想在栈中分配数组,且懒得改任何东西,你还可以用static局部变量;如果你觉得static局部变量在多线程同时调用时会冲突,你还可以用static thread_local。 ------ 不推荐这种方法
#5
op1232022-08-16 12:48
根本原因是因为每个程序匀给每个数组的空间是有限的

[此贴子已经被作者于2022-8-17 15:49编辑过]

#6
chenyucheng2022-08-17 14:30
超过了16位无符号整数的最大值65535
1