数组存放在啥位置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组存放在啥位置?相关的知识,希望对你有一定的参考价值。
就简简单单定义一个数组
char a[100];
它是放在什么位置?栈里面?
老师留一个题,要先这样定义数组来接受字符串,然后用malloc堆开辟一块空间来把a数组里面的东西放到新开辟的地方,也就是堆空间;
请问这样做有意义吗?
堆很大?
放在堆里 易于程序执行?
求解
如果定义在函数下的局部变量,这个数组就在函数调用栈里。
用malloc申请堆空间拷贝数组内容,可能就是这个数组是在函数里定义的局部变量,函数调用结束后,栈里面为这个函数分配的空间就要失效,从而局部变量数组也会失效。但堆空间不会因为函数调用结束失效,函数调用结束后,函数里malloc出来内存空间仍然有效。
堆是系统管理的剩余内存,供系统运行过程中申请/释放内存空间,一般都比较大。 参考技术A
数组是用于储存多个相同类型数据的集合。
在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
一维数组在内存中的存放方式是:
1、硬盘上不可能运行程序的,必须在内存中运行。
2、低地址到高地址存储 。
3、数组元素通常也称为下标变量。
4、在C语言中,只能逐个地使用下标变量, 不能用一个语句输出整个数组。
5、int a[10]和t=a[6]分别是定义数组长度为10和引用a数组中序号为6的元素,6不代表数组长度。
参考技术B 1、栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。
3、全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻的另一块区域,程序结束后由系统释放。
4、文字常量区:常量字符串就是放在这里,程序结束后由系统释放。
5、程序代码区:存放函数体的二进制代码。 参考技术C 首先你要明白什么是堆,什么是栈。
栈是由编译器自己开辟的用来存放局部数据(局部变量,未显式初始化则为随机值),编译的时候不存在,运行的时候猜出现。
堆是由程序员开辟,堆是动态内存,也就是说知道程序员去释放它,否则它一直存在。
堆的大小:你开辟多大的空间,它就有多大。在c中是malloc,c++中是new。
最后一个问题,不是为了易于执行的,栈中的局部变量在使用完之后就释放掉了,即使这时候程序还没结束(例如局部函数中的变量,在出了“}”之后就释放了,释放之后就不能使用了)。而堆就不会释放,可以一直使用。追问
那老师让我们这么做没什么道理?难道只是让我们练习一下malloc?不会吧?
求解?
如果说没有free堆空间,那是不是进程结束了,那个开辟的位置还有数据呢?
是让你们比较对比栈和堆的区别,这怎么没道理了?
程序结束,内存会被释放了。这是C++机制了好像。
如果存在句柄,并且还在被外部使用,那么程序结束了,这个句柄还是存在的。不会立即释放。
谢谢你的回答,上次误操作没采纳你,原谅我吧~阿门。。。
追答阿门。
以上是关于数组存放在啥位置?的主要内容,如果未能解决你的问题,请参考以下文章