• 内存四区-常量区


    用代码例子看一个数据区中常量区

    #include <stdio.h>
    #include <stdlib.h>

    char *getStr1()
    {
      char *pstr1 = "adfag";//pstr1是局部变量,在声明时入栈,函数结束后出栈 
      return pstr1;
    }

    char *getStr2()
    {
      //因为 getStr1和getStr2二个函数中的字符串一样,C++编译器会对代码做优化,在数据区的常量区只保留一份字符串,即 pstr1和pstr2指向同一个内存地址 
      char *pstr2 = "adfag"; 
      return pstr2;
    }

    int main()
    {
      char *p1 = NULL;
      char *p2 = NULL;
      p1 = getStr1();
      p2 = getStr2();

      printf("p1:%s, p2:%s ", p1, p2);//打印指针p1,p2所指向内存空间的数据 
      printf("p1:%d, p2:%d ", p1, p2);//打印指针p1,p2的值 
      system("pause");
      return 0;
    }

    运行结果如下:

    可见,二个相同的字符串的情况,在常量区不会开辟二块内存,而是使用相同内存区域,相当于一个字符串。

    PS: 因为常量区内存空间的生命周期归操作系统管理,函数getStr1,getStr2执行完后不会被析构掉,所以我们可以在调用函数里使用该字符串常量

  • 相关阅读:
    Koa初探
    npm 安装electron 失败的问题和解决办法
    vscode常用快捷键
    docker 执行TP 的 migrate数据库迁移报错2002
    git删除历史记录中的大文件详解
    js replace 替换路径无效的问题
    window.prompt()方法数据类型问题
    scorecardpy 介绍
    CatBoost 使用
    webgl
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10222640.html
Copyright © 2020-2023  润新知