码迷,mamicode.com
首页 > 其他好文 > 详细

内存四区-常量区

时间:2019-01-04 22:00:14      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:一个   .com   dfa   局部变量   打印   \n   字符   stdio.h   数据   

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

#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 \n", p1, p2);//打印指针p1,p2所指向内存空间的数据 
  printf("p1:%d, p2:%d \n", p1, p2);//打印指针p1,p2的值 
  system("pause");
  return 0;
}

运行结果如下:

技术分享图片

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

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

内存四区-常量区

标签:一个   .com   dfa   局部变量   打印   \n   字符   stdio.h   数据   

原文地址:https://www.cnblogs.com/fengxing999/p/10222640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!