黑马程序员技术交流社区

标题: 内存分哪5大区域呢?详细说下 [打印本页]

作者: gamyc    时间: 2015-5-18 12:32
标题: 内存分哪5大区域呢?详细说下
视频教程中,老师仅仅提到内存分5大区域,说到栈和堆,没提别的

作者: 香草芭芙    时间: 2015-5-18 12:44
   转载自: http://blog.csdn.net/hairetz/article/details/4141043
  1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其  
  操作方式类似于数据结构中的栈。  
  2、堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回  
  收   。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。  
  3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的  
  全局变量和静态变量在一块区域,   未初始化的全局变量和未初始化的静态变量在相邻的另  
  一块区域。   -   程序结束后由系统释放。  
  4、文字常量区   —常量字符串就是放在这里的。   程序结束后由系统释放  
  5、程序代码区—存放函数体的二进制代码。  
  1. 例子程序:
  2.   这是一个前辈写的,非常详细   
  3.   //main.cpp   
  4.   int   a   =   0;   全局初始化区   
  5.   char   *p1;   全局未初始化区   
  6.   main()   
  7.   {   
  8.   int   b;   栈   
  9.   char   s[]   =   "abc";   栈   
  10.   char   *p2;   栈   
  11.   char   *p3   =   "123456";   123456\0在常量区,p3在栈上。   
  12.   static   int   c   =0;   全局(静态)初始化区   
  13.   p1   =   (char   *)malloc(10);   
  14.   p2   =   (char   *)malloc(20);   
  15.   分配得来得10和20字节的区域就在堆区。   
  16.   strcpy(p1,   "123456");   123456\0放在常量区,编译器可能会将它与p3所指向的"123456"  
  17.   优化成一个地方。   
  18.   }   
复制代码

作者: lz465350    时间: 2015-5-18 15:25
香草芭芙 发表于 2015-5-18 12:44
转载自: http://blog.csdn.net/hairetz/article/details/4141043
  1、栈区(stack)—   由编译器自动 ...

太感谢你的分享了,记得以前看过,不过早就忘了,还得多复习复习了:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2