我们假设处理器中有200个字节的内存.
这是代码:
#include <stdlib.h>
char * p;
char data;
void test1()
{
p = (char *)malloc(sizeof(char) * 300);
p[0] = 1;
}
void test2()
{
p = (char *)malloc(sizeof(char) * 300);
data = p[5];
}
Run Code Online (Sandbox Code Playgroud)
当我运行"test1()"时,显然会有内存溢出.但是"test2()"不会.编译器是否优化了"test2()"中的内存?怎么样?
还有一个奇怪的问题:
void test3()
{
char ele[1000]={0};
}
void test4()
{
char ele[1000];
ele[999] = 10;
}
Run Code Online (Sandbox Code Playgroud)
"test3()"将导致内存溢出,"test4()"将不会.
抱歉我的英语不好,谢谢你的回答.
最后,我想出来了.我检查了汇编代码,在"test3"中它确实分配了内存.但是在"test4"中,编译器优化了数组,没有为它分配内存.
谢谢@Philipp,谢谢大家.