检测到堆栈溢出时强制gcc编译

fak*_*che 1 c stack-overflow stack gcc gcc-warning

我怎么能强制gcc编译一个程序,我在其中声明一个比我的ram大的无符号整数数组 - 没有得到警告警告:"表达式中的整数溢出"?

例如.我有8GB的RAM,我想要声明一个8.5gb的数组.

编辑:

谢谢大家,我发现问题不是数据类型,而是一些预处理器的东西.我花了很长一段时间.:) 我写

#define GIBI 1073741824
#define ARRAYSIZE 2*GIBI
Run Code Online (Sandbox Code Playgroud)

显然编译器不喜欢这样.

nmi*_*els 5

该错误消息并不是说你将会耗尽堆栈,尽管你会.它说这个数字太大而无法代表size_t.确保您正在编译64位目标.

此外,不要这样做.如果您需要分配大量的RAM,请使用malloc,而不是堆栈.或者,更好的是,与mmap.


Wya*_*son 5

integer overflow in expression不是堆栈溢出,这意味着GCC已检测到表达式的结果导致您分配给它的左值中的积分溢出.例如,如果你尝试malloc类似的东西INT_MAX * 2,那个表达式会导致整数溢出.如果你把它投射到a size_t,你应该没有警告:

void *myvar = malloc((size_t) INT_MAX * 2);
Run Code Online (Sandbox Code Playgroud)

size_t当然,它是与平台相关的,如果你不能用比特来表示你想要分配的块的大小,你可以溢出sizeof(size_t).基本上,确保您使用的是能够表示您想要分配的内存量并且与之兼容的类型size_t(因为这是malloc()预期的,根据stdlib.h).