C/C++数据存储问题

C/C++内存区域

原文:https://blog.csdn.net/hairetz/article/details/4141043

一个由C/C++编译的程序占用的内存分为以下几个部分:

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 - 程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。

栈区(stack)

  1. 由编译器自动分配和释放,一般用来存放局部变量、函数参数,
  2. 空间较小,只有2M,也就是2*1024*1024 = 2,097,152字节,局部变量空间顶多放得下下524288个int类型。
  3. 当我们在栈区开一个大小为1e6的int数组时,就会溢出,程序无法运行。所以我们需要注意数组的大小,当需要存储的int数量大于1e5时,就需要在静态变量区开数组。

全局初始化数据区/静态数据区(Data Segment)

  1. 就是存放全局变量和静态变量的地方。这个区域被整个进程共享。
  2. Data Segment的所允许的空间大小取决于电脑剩余内存的大小,如果电脑剩余8G内存的话,int类型的二维数组甚至可以开到46340*46340的大小。
  3. 一般的算法题目限定的内存大小是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值