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的结构如下图所示 ... 
随机推荐
- Hive实现网站PV分析
			原文链接: https://www.toutiao.com/i6773241257528394248/ 之前我们做过<java mapreduce实现网站PV分析>,这次我们可以用hive ... 
- Ubuntu16桌面版编译和安装OpenCV4
			欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ... 
- [Eclipse插件] 编辑插件IndentGuide
			IndentGuide插件 将可配置的缩进指导线添加到Eclipse文本编辑器 如下图 
- [Jetson Nano]Jetson Nano快速入门
			NVIDIAJetsonNano开发套件是适用于制造商,学习者和开发人员的小型AI计算机.相比Jetson其他系列的开发板,官方报价只要99美金,可谓是相当有性价比.本文如何是一个快速入门的教程,主要 ... 
- 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)
			公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ... 
- 巧用 Base62 解决字段太短的问题
			最近银联一纸 259 号改造通知,所有支付机构开始改造支付交易,上传终端信息. 不知道其他支付机构的小伙伴针对这次改造是否开始了? 由于这次银联给的时间非常少,我们这边改动涉及到相关上游一起改造,所以 ... 
- 集合框架-List集合的常见方法
			1 package cn.itcast.p4.list.demo; 2 3 import java.util.List; 4 import java.util.ArrayList; 5 6 publi ... 
- 集合框架-工具类-JDK5.0特性-静态导入
			1 package cn.itcast.p4.news.demo; 2 3 import java.util.ArrayList; 4 //import java.util.Collections; ... 
- Ventoy的UEFI模式安全启动操作说明
			Ventoy 1.0.07 版本开始支持 Secure Boot (安全启动),但是这个方案不是非常的完美,会导致在一些机器上不管BIOS里安全启动是否关闭都不能正常工作.因此从 1.0.09 版本开 ... 
- vscode配置golang开发环境
			软件: go1.16.5.windows-amd64.msi vscode go安装后已经自动配置相关环境变量.在cmd中用go env查看环境变量. vscode设置goroot和gopath 找到 ... 
