关于全局变量分配内存的误解

来源:互联网 发布:中国航天发动机 知乎 编辑:程序博客网 时间:2024/06/04 18:22

以前以为定义一个数组的话,系统会自动为其在heap上分配一块儿新的内存空间。但是在做实验的时候发现原先的理解有误

代码如下:

for(int nIter=0; nIter<3; nIter++){char name[16]={0};printf("a new name point to %p\n");}
输出显示,每次分配的都是同一个内存地址,并没有为其分配新的内存空间

深入理解:

进程应该是有一个共同的HEAP,那会不会所有相同名字、相同类型的数组会不会都指向同一片内存空间呢?

于是又做了如下实验:

void newMem(){char name[16]={0};printf("in other function: name point to %p\n", name);}void main(){for(int nIter=0; nIter<3; nIter++){char name[16]={0};printf("a new name point to %p\n");}newMem();}
实验结果发现,在不同的函数调用中,相同类型,相同名字的数组指向了不同的内存空间。

按说,每个函数是有自己独立的栈空间的,但是数组属于堆上分配的;如果堆是按照类型跟名字查找的话,也对不上号

。。。

还是有疑惑,找个牛人去解答,先留着



原创粉丝点击