c++ 汇编代码看内存分配
2024-08-31 08:37:52
汇编代码看内存分配
- (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
最新文章
- 手机APP创建桌面快捷方式
- java Properties 配置信息类
- MariaDB 10.1配置
- forward内部跳转 和redirect重定向跳转的区别
- usb驱动开发15之设备生命线
- wampserver 绑定域名 外部可以正常访问
- 让你的APP支持iPhone5
- 纯js写验证码
- POSIX、XNU
- 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏
- [转载]VMWare网络连接透析
- USB设备在连接PC时的reset从何而来?
- PHP 自学之路-----XML编程(Xpath技术,simpleXml技术)基础入门
- [Cocos2d-x]创建项目
- 结构体(struct)大小
- (一)《Maven实战》读书笔记 —— Maven简介
- python获取当前运行程序的名字
- C++版 - HDUoj 2010 3阶的水仙花数 - 牛客网
- Kafka启动报错 : ERROR Processor got uncaught exception
- 机器学习超参数优化算法-Hyperband
热门文章
- STM32寄存器深入分析
- Zabbix漏洞利用 CVE-2016-10134
- Java对象内存模型
- 【经验总结】VSCode中找不到numpy/matplotlib/pillow,navigator没了
- 记录一个问题:macos High Sierra 10.13.6 内核内存泄漏,导致内存满而不得不重启
- 【小记录】android下opencv的cv::dft()函数,CPU版本与opencl版本的性能相差16倍
- MySQL数据库本地事务原理
- 安装python3.6,设为默认,yum不能用
- collate utf8_bin是什么意思
- 常见线程池 newFixedThreadPool 的简单使用