小编Joh*_*n G的帖子

编译器是否优化了由"malloc()"函数分配的内存?

我们假设处理器中有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,谢谢大家.

c memory optimization memory-management

0
推荐指数
1
解决办法
170
查看次数

标签 统计

c ×1

memory ×1

memory-management ×1

optimization ×1