数组存放在什么位置?
就简简单单定义一个数组chara[100];它是放在什么位置?栈里面?老师留一个题,要先这样定义数组来接受字符串,然后用malloc堆开辟一块空间来把a数组里面的东西放到...
就简简单单定义一个数组
char a[100];
它是放在什么位置?栈里面?
老师留一个题,要先这样定义数组来接受字符串,然后用malloc堆开辟一块空间来把a数组里面的东西放到新开辟的地方,也就是堆空间;
请问这样做有意义吗?
堆很大?
放在堆里 易于程序执行?
求解 展开
char a[100];
它是放在什么位置?栈里面?
老师留一个题,要先这样定义数组来接受字符串,然后用malloc堆开辟一块空间来把a数组里面的东西放到新开辟的地方,也就是堆空间;
请问这样做有意义吗?
堆很大?
放在堆里 易于程序执行?
求解 展开
4个回答
展开全部
如果是定义在全局下的全局变量,这个数组就在数据段里。始终有效。
如果定义在函数下的局部变量,这个数组就在函数调用栈里。
用malloc申请堆空间拷贝数组内容,可能就是这个数组是在函数里定义的局部变量,函数调用结束后,栈里面为这个函数分配的空间就要失效,从而局部变量数组也会失效。但堆空间不会因为函数调用结束失效,函数调用结束后,函数里malloc出来内存空间仍然有效。
堆是系统管理的剩余内存,供系统运行过程中申请/释放内存空间,一般都比较大。
如果定义在函数下的局部变量,这个数组就在函数调用栈里。
用malloc申请堆空间拷贝数组内容,可能就是这个数组是在函数里定义的局部变量,函数调用结束后,栈里面为这个函数分配的空间就要失效,从而局部变量数组也会失效。但堆空间不会因为函数调用结束失效,函数调用结束后,函数里malloc出来内存空间仍然有效。
堆是系统管理的剩余内存,供系统运行过程中申请/释放内存空间,一般都比较大。
展开全部
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你要明白什么是堆,什么是栈。
栈是由编译器自己开辟的用来存放局部数据(局部变量,未显式初始化则为随机值),编译的时候不存在,运行的时候猜出现。
堆是由程序员开辟,堆是动态内存,也就是说知道程序员去释放它,否则它一直存在。
堆的大小:你开辟多大的空间,它就有多大。在c中是malloc,c++中是new。
最后一个问题,不是为了易于执行的,栈中的局部变量在使用完之后就释放掉了,即使这时候程序还没结束(例如局部函数中的变量,在出了“}”之后就释放了,释放之后就不能使用了)。而堆就不会释放,可以一直使用。
栈是由编译器自己开辟的用来存放局部数据(局部变量,未显式初始化则为随机值),编译的时候不存在,运行的时候猜出现。
堆是由程序员开辟,堆是动态内存,也就是说知道程序员去释放它,否则它一直存在。
堆的大小:你开辟多大的空间,它就有多大。在c中是malloc,c++中是new。
最后一个问题,不是为了易于执行的,栈中的局部变量在使用完之后就释放掉了,即使这时候程序还没结束(例如局部函数中的变量,在出了“}”之后就释放了,释放之后就不能使用了)。而堆就不会释放,可以一直使用。
更多追问追答
追问
那老师让我们这么做没什么道理?难道只是让我们练习一下malloc?不会吧?
求解?
如果说没有free堆空间,那是不是进程结束了,那个开辟的位置还有数据呢?
追答
是让你们比较对比栈和堆的区别,这怎么没道理了?
程序结束,内存会被释放了。这是C++机制了好像。
如果存在句柄,并且还在被外部使用,那么程序结束了,这个句柄还是存在的。不会立即释放。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。
2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。
3、全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻的另一块区域,程序结束后由系统释放。
4、文字常量区:常量字符串就是放在这里,程序结束后由系统释放。
5、程序代码区:存放函数体的二进制代码。
2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。
3、全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻的另一块区域,程序结束后由系统释放。
4、文字常量区:常量字符串就是放在这里,程序结束后由系统释放。
5、程序代码区:存放函数体的二进制代码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询