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. Linux命令格式 命令 命令选项 学会看语法: {必选项}[可选项] 举例 ls -a /tmp 等价 ls –all /tmp ls 命令 -a 命令选项 简写使用- 全写-- /tmp 参 ...
- 微服务架构攀登之路(二)之RPC
1. RPC 简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编 ...
- Microsoft Store 桌面应用发布流程(一)之打包应用
这篇博客主要是介绍桌面应用打包的流程,应用发布流程请看 Microsoft Store 桌面应用发布流程(二)之提交应用 1. 创建打包项目 打开现有的桌面应用项目.选择解决方案项目,右键选择 添加新 ...
- Parallel.For实现
static class MyParallel { //4.0及以上用Task, Task的背后的实现也是使用了线程池线程 //static List<Task> tasks = new ...
- java string 转化为json_java String 转Json报错
缺少jar包依赖: java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean 缺少commons-beanutils- ...
- Servlet Session的使用
Session 是服务器端会话技术.当浏览器访问 Web 服务器的资源时,服务器可以为每个用户浏览器创建一个 Session 对象,每个浏览器独占一个 Session 对象.由于每个浏览器独占一个 S ...
- django之js模板插件artTemplate的使用
安装: 方式1:artTemplate模板源码下载地址:https://aui.github.io/art-template/zh-cn/index.html 方式2:使用node.js进行安装:np ...
- [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构
[源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 目录 [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 0x00 摘要 0x01 启动 1.1 分 ...
- 分布式缓存系统——memcache
一.简介 memcache是一个自由开源的.高性能的.分布式内存对象缓存系统.它是一种基于内存的key-value存储,用来存储小块的任意数据(字符串.对象).这些数据可以是数据库调用.API调用等. ...
- Log4j2日志技术总结
前言 现在流行是SLF4j和Log4j2组合的日志技术,但为了日志技术归类,故前因后果都将做一下介绍. 市场上流行的日志框架 JUL java util logging Java开发团队开发,Jdk原 ...