c++ 汇编代码看内存分配
汇编代码看内存分配
- (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




c++ 汇编代码看内存分配的更多相关文章
- Sizeof的计算看内存分配
本文记录了有关sizeof的一些计算,主要有下面的四种情况:(如有错误,敬请留言) 使用sizeof()计算普通变量所占用的内存空间 sizeof计算类对象所占用空间的大小-用到了字节对齐 sixeo ...
- C++ | 调试 · 从汇编代码看i++和++i的区别
以int类型为例 C++编译器为++i生成的代码是 013E1375 mov eax,dword ptr [i] 013E1378 add eax, 013E137B mov dword ptr [i ...
- Java当中的内存分配以及值传递问题内存解析
首先必须说明作为Java程序员对于内存只要有大致的了解就可以了,如果你对Java当中的某一个知识点在不需要分析内存分配过程的情况下可以掌握,那就大可不必去研究内存.如果你对知识点已经掌握,那么你应该把 ...
- GlusterFS源代码解析 —— GlusterFS 内存分配方式
原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564891 GlusterFS 的内存分配主要有两种方式,一种是内存 ...
- Swift 枚举-从汇编角度看枚举内存结构
一.基本使用 先看枚举的几种使用(暂不要问,看看是否都能看懂,待会会逐一讲解) 1.操作一 简单使用 //第一种方式 enum Direction { case east case west case ...
- 从linux0.11中起动部分代码看汇编调用c语言函数
上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...
- 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”(转)
C++的内存有五大分区:堆区.栈区.自由存储区.全局/静态存储区.常量存储区. 五个数据段:数据段.代码段.BSS段.堆.栈 内存分配方式有三种: 从静态存储区域分配.内存在程序编译的时候就已经分配好 ...
- 使用汇编分析c代码的内存分布
arm平台下使用反汇编分析c内存分布: arm:使用arm-linux-objdump命令将编译完毕之后的elf文件,进行反汇编. 之后重定向到tmp.s文件里. 第一步变量例如以下c文件. vim ...
- mimalloc内存分配代码分析
这篇文章中我们会介绍一下mimalloc的实现,其中可能涉及上一篇文章提到的内容,如果不了解的可以先看下这篇mimalloc剖析.首先我们需要了解的是其整体结构,mimalloc的结构如下图所示 ...
随机推荐
- Linux上天之路(六)之Linux文件管理
文件与文件夹的操作 1) 新建 2)改名 3)查看 4)删除 5)拷贝 6)移动 1. 文件的操作 文件的新建:touch filename 文件的改名:mv 文件的查看:ls 文件内容的查看:cat ...
- Go标准库之html/template
html/template包实现了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容.它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用html/templ ...
- java邮件打包在linux备份数据库练习
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812982512256549387/ 承接上一篇文档<Java实现163邮箱发送邮件到QQ邮箱> 主方 ...
- Redis可视化内存分析工具--RDR:查看Redis中key的占用情况
RDR(redis datareveal)是一个解析redis rdbfile的工具.与redis-rdb-tools 相比,RDR 是由 golang 实现的,速度要快得多(5GB rdbfile ...
- 制作JavaCV应用依赖的基础Docker镜像(CentOS7+JDK8+OpenCV4)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)
公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ...
- Windows系统安装和office版本兼容
MSDN, I tell you 下载windows10系统各种纯净镜像.但是还是推荐使用官网修改参数显示出下载链接,下载windows10最新版. 在最近几次重做系统中,PE工具似乎无法识别从MSD ...
- python文档2-unittest单元测试之mock.patch
介绍mock里面另一种实现方式,patch装饰器的使用,patch() 作为函数装饰器,为您创建模拟并将其传递到装饰函数 patch简介 1.unittest.mock.patch(target,ne ...
- gin框架中项目的初始化
核心知识点 json配置文件解析成结构体 将路由对应的接口抽离到单独的文件中,main函数中直接注册路由即可 项目目录图 项目代码 app.json代码 { "app_name": ...
- golang中的channel
1. 概念 单纯的将函数并发执行是没有意义的,函数与函数之间需要交换数据才能提现并发执行函数的意义虽然可以使用共享内存来进行数据的交换,但是在共享内存在不同的goroutine中容易发生竟态问题,为了 ...