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

  • 相关阅读:
    获取html页面传递过来的参数
    jqueryWeiui+pagehelper滚动加载(实现分页)
    【JS】js随笔
    【Java】Java基础
    【FrameWork】Hibernate
    【FrameWork】Struts2
    去掉inline-block间的间隙
    javascript单例模式
    关于call/apply与bind的一点误解
    git笔记-常用命令
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/15635819.html
Copyright © 2020-2023  润新知