汇编代码看内存分配

  • (1). 程序运行时分为存储区域分为
存储区域 存储内容 extra
代码区 存放代码指令,包括除字符串常量的字面值
静态存储区 存放静态变量和全局变量 执行main之前就分配好了,系统回收
字符串常量区 存放字符串常量 执行main之前就分配好了,系统回收
栈区 局部变量,空间连续 边执行边分配,程序自己回收
堆区 malloc,new指令分配点空间(不连续) 边执行边分配,delete或free回收,否则要到程序结束后系统回收
  • (2). 字符串字面值,什么时候才会存放到字符串常量区
const char *p1 = "hello";  // 只有将字符串字面值赋给一个const char指针时,由于没有为字符串字面值在栈分配空间,就会把字符串字面值储存到字符串常量区。
const char *p2 = "hello" // 字符串常量区的相同字符串,只有一份,p1和p2指针指向相同的地址。
char ch[] = "hello"; // 为字面值在栈区分配了6个char的空间(包括一\0),所以这个时候"hello"是存放在代码区,程序执行到这条代码时,才会分配栈空间,并把字面值从代码区拷贝到栈区。
  • (3). const不改变数据的存放位置,只是用于指导编译器检查改变量是否有被写的情况,有的话报错,运行时与平台变量存放一样
const int a = 10;
int b = 10;
// a b都是存储在栈区。

汇编程序看内存分配例子

C++程序

int glob = 10;

int main() {
const char *p1 = "123";
const char *p2 = "abcd";
const char *p3 = "abcd";
static char p4[6] = "xxx";
static char p5[7];
const char p6[] = "hello";
char p7[] = "xyzx";
p5[0] = 1;
char *p8 = new char[10]; return 1;
}

汇编程序

编译命令:g++ -S test.cpp -o test.s







最新文章

  1. 手机APP创建桌面快捷方式
  2. java Properties 配置信息类
  3. MariaDB 10.1配置
  4. forward内部跳转 和redirect重定向跳转的区别
  5. usb驱动开发15之设备生命线
  6. wampserver 绑定域名 外部可以正常访问
  7. 让你的APP支持iPhone5
  8. 纯js写验证码
  9. POSIX、XNU
  10. 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏
  11. [转载]VMWare网络连接透析
  12. USB设备在连接PC时的reset从何而来?
  13. PHP 自学之路-----XML编程(Xpath技术,simpleXml技术)基础入门
  14. [Cocos2d-x]创建项目
  15. 结构体(struct)大小
  16. (一)《Maven实战》读书笔记 —— Maven简介
  17. python获取当前运行程序的名字
  18. C++版 - HDUoj 2010 3阶的水仙花数 - 牛客网
  19. Kafka启动报错 : ERROR Processor got uncaught exception
  20. 机器学习超参数优化算法-Hyperband

热门文章

  1. STM32寄存器深入分析
  2. Zabbix漏洞利用 CVE-2016-10134
  3. Java对象内存模型
  4. 【经验总结】VSCode中找不到numpy/matplotlib/pillow,navigator没了
  5. 记录一个问题:macos High Sierra 10.13.6 内核内存泄漏,导致内存满而不得不重启
  6. 【小记录】android下opencv的cv::dft()函数,CPU版本与opencl版本的性能相差16倍
  7. MySQL数据库本地事务原理
  8. 安装python3.6,设为默认,yum不能用
  9. collate utf8_bin是什么意思
  10. 常见线程池 newFixedThreadPool 的简单使用