我如何强制 gcc 编译一个程序,在该程序中我声明了一个比我的 ram 大的无符号整数数组 - 而没有收到警告警告:“表达式中的整数溢出”?
例如。我有 8gb 的 ram,我想声明一个 8.5gb 的数组。
编辑:
谢谢大家,我发现问题不在于数据类型,而在于一些预处理器。虽然我花了很长时间。 :) 我写了
#define GIBI 1073741824
#define ARRAYSIZE 2*GIBI
显然编译器不喜欢这样。
最佳答案
integer overflow in expression
不是堆栈溢出,这意味着 GCC 检测到您的表达式的结果导致您分配给它的左值出现整数溢出。例如,如果您尝试 malloc
类似 INT_MAX * 2
的东西,该表达式将导致积分溢出。如果将其转换为 size_t
,你应该没有警告:
void *myvar = malloc((size_t) INT_MAX * 2);
size_t
是,当然,依赖于平台,如果你不能表示你想要在 sizeof(size_t)
中分配的 block 的大小,你可能也会溢出。位。基本上,确保您使用的类型能够表示您要分配的内存量,并且它与 size_t
兼容。 (因为这就是 malloc()
所期望的,根据 stdlib.h
)。
关于c - 检测到堆栈溢出时强制 gcc 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443807/