博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++中变量的存储位置
阅读量:2380 次
发布时间:2019-05-10

本文共 616 字,大约阅读时间需要 2 分钟。

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

  1. 栈区(stack) :由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
  2. 堆区(heap) : 一般由程序员分配释放, new, malloc之类的,若程序员不释放,程序结束时可能由OS回收 。
  3. 全局区(静态区)(static) :存放全局变量、静态数据、常量。程序结束后由系统释放。
  4. 文字常量区 :常量字符串就是放在这里的。程序结束后由系统释放。
  5. 程序代码区 :存放函数体(类成员函数和全局函数)的二进制代码。

例子:

//main.cpp int a = 0; 全局初始化区  char *p1; 全局未初始化区 int main()  {      int b;// 栈     char s[] = "abc"; //栈     char *p2; //栈      char *p3 = "123456";//在常量区,p3在栈上。     static int c =0; //全局(静态)初始化区     p1 = (char *)malloc(10);     p2 = (char *)malloc(20);     //分配得来得10和20字节的区域就在堆区。     strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 }

转载地址:http://viwab.baihongyu.com/

你可能感兴趣的文章
团队管理的五项职能--学习笔记加个人理解总结
查看>>
自勉三句话--关于职业生涯规划
查看>>
grace
查看>>
test
查看>>
用友实施方法论
查看>>
系统功能清单
查看>>
ERP&MES&SCM 三兄弟发展史
查看>>
Grace的简历-v3.1
查看>>
file2
查看>>
file456
查看>>
flow
查看>>
需求定位模型
查看>>
BOM
查看>>
Eclipse Debug调试详解
查看>>
Type Dynamic Web Module 4.0 requires Java 1.8 or newer----彻底杀死Bug
查看>>
前端接口请求测试
查看>>
error RS102 too stale to catch up
查看>>
Nagios监控MySQL报错:NRPE: Unable to read output的详细解决过程
查看>>
YUM安装调试以及命令详解
查看>>
在MySQL中使用init-connect与binlog来实现用户操作追踪记录
查看>>