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
""
""
""
""

posted @ 2021-12-02 23:22  下夕阳  阅读(226)  评论(0编辑  收藏  举报