以前以为定义一个数组的话,系统会自动为其在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();
}
实验结果发现,在不同的函数调用中,相同类型,相同名字的数组指向了不同的内存空间。
按说,每个函数是有自己独立的栈空间的,但是数组属于堆上分配的;如果堆是按照类型跟名字查找的话,也对不上号
。。。
还是有疑惑,找个牛人去解答,先留着