C/C++内存区域
原文:https://blog.csdn.net/hairetz/article/details/4141043
一个由C/C++编译的程序占用的内存分为以下几个部分:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 - 程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
栈区(stack)
- 由编译器自动分配和释放,一般用来存放局部变量、函数参数,
- 空间较小,只有2M,也就是2*1024*1024 = 2,097,152字节,局部变量空间顶多放得下下524288个int类型。
- 当我们在栈区开一个大小为1e6的int数组时,就会溢出,程序无法运行。所以我们需要注意数组的大小,当需要存储的int数量大于1e5时,就需要在静态变量区开数组。
全局初始化数据区/静态数据区(Data Segment)
- 就是存放全局变量和静态变量的地方。这个区域被整个进程共享。
- Data Segment的所允许的空间大小取决于电脑剩余内存的大小,如果电脑剩余8G内存的话,int类型的二维数组甚至可以开到46340*46340的大小。
- 一般的算法题目限定的内存大小是64MB,即64*1024*1024 = 67,108,864字节,能够放下16,777,216个int类型
数据类型大小
64位编译器:
原文:http://www.cnblogs.com/jerryshao2015/p/4457133.html
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
关于整型
参考资料
什么是代码区、常量区、静态区(全局区)、堆区、栈区?https://blog.csdn.net/u014470361/article/details/79297601
堆和栈的区别:https://blog.csdn.net/hairetz/article/details/4141043