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

     

     

     

  • 相关阅读:
    [ERROR] Terminal initialization failed; falling back to unsupported
    设计模式原则
    设计模式:概述
    INFO Dispatcher:42
    Exception occurred during processing request: id to load is required for loading
    Java编程基础篇第六章
    Spring (一)(未完~~~
    Spring MVC处理过程理解(一)
    Spring MVC源码解析(二)
    MyBatis拦截器(一)
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/11517069.html
Copyright © 2011-2022 走看看