zoukankan      html  css  js  c++  java
  • 汇编代码看数据存储

    汇编代码看数据存储

    程序运行时分为存储区域分为

    1、代码区------------>存放代码指令,包括除字符串常量的字面值

    2、静态存储区------>存放静态变量和全局变量------------------------>执行main之前就分配好了------------->系统回收

    3、字符串常量区--->存放字符串常量------------------------------------>执行main之前就分配好了-------------->系统回收

    4、栈区--------------->局部变量,空间连续------------------------------>边执行边分配---------------------------->程序自己回收

    5、堆区--------------->malloc,new指令分配点空间(不连续)------->边执行边分配---------------------------->delete或free回收,否则要到程序结束后系统回收。

    字符串字面值,什么时候才会存放到字符串常量区

    const char *p1 = "hello";  // 只有将字符串字面值赋给一个const char指针时,由于没有为字符串字面值在栈分配空间,就会把字符串字面值储存到字符串常量区。
    const char *p2 = "hello"   // 字符串常量区的相同字符串,只有一份,p1和p2指针指向相同的地址。
    char ch[] = "hello";       // 为字面值在栈区分配了6个char的空间(包括一),所以这个时候"hello"是存放在代码区,程序执行到这条代码时,才会分配栈空间,并把字面值从代码区拷贝到栈区。

    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

     

     

     

  • 相关阅读:
    Rman-10038: Database Session For Channel D1 Terminated Unexpectedly
    MySQL从入门到项目实践 pdf下载
    Oracle_优化器使用(oracle11g)
    当sqlserver启用sa账户时,出现Microsoft SQL Server 错误代号: 15535 解决方法 (转)
    sqlserver 如何分析“死锁调度程序”转储?
    AtCoder Beginner Contest 213
    LOJ
    [学习笔记] 计算几何
    [COCI 2009-2010 #6] XOR
    BZOJ
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/11517069.html
Copyright © 2011-2022 走看看