我正在阅读缓冲区溢出.我发现有关堆栈上局部变量的内存分配的一个奇怪的事情
int f1 () { char string1[12]; char string2[4]; }
这里分配发生在堆栈上.
现在,在GCC中,string2被分配了4个字节,但是如果我声明除了2的幂(最多16个)之外,则由编译器分配16个字节.这意味着如果我在3,5,6,7,….,15个字节中分配string2,那么它由编译器分配16个字节,但如果我分配2的幂,如1,2,4,8 ……然后它被分配完全相同的大小.如果我分配超过16个字节(不是2的幂),那么它分配32个字节(我估计高达32个字节).
而在Visual Studio中,如果我分配1个字节,则分配9个字节,如果从2-4个字节分配,则分配12个字节,如果从5-8个字节开始,则编译器分配16个字节.
任何人都知道为什么这样的任务???
Atleast在Visual Studio中,如果有缓冲区溢出,我会收到调试错误,但在gcc中没有任何反应. GCC仅在发生过大的溢出时才提供分段故障.