其神若何,月射寒江。

c/c++的内存结构

上一篇 / 下一篇  2010-07-15 14:51:56 / 个人分类:开发技术

 

其实java c/c++的内存结构都差不到。

主要是栈和堆。

最大的不同点是java的堆是自动回收的,c/c++是要程序员回收。

一个由c/C++编译的程序占用的内存分为以下几个部分

1栈区(stack由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2堆区(heap一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.

3全局区(静态区)(static—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放

4文字常量区—常量字符串就是放在这里的。程序结束后由系统释放

5程序代码区—存放函数体的二进制代码。

 

//main.cpp

int a = 0; //全局初始化区

char *p1;

main()

{

int b; //

char s[] = "abc";

char *p2;

char *p3 = "123456";// 123456在常量区,p3在栈上。

static int c =0//全局(静态)初始化区

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);//分配得来得1020字节的区域就在堆区。

strcpy(p1, "123456"); 123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。

}

 


TAG:

 

评分:0

我来说两句

xiaohanjiang

xiaohanjiang

River.liu又名小寒江。曾经从事多年JAVA软件开发工作,这几年一直从事软件测试工作。多年来,一直致力于软件工程、软件开发、软件测试方面的研究。不喜欢自称高手,不愿意自封资深;科学研究讲究的是务实、实践。真理、真知才是硬道理。茫茫海洋,我只希望我的每个理念能游弋于业界之间。我的思想能在你的脑海中徜徉。

日历

« 2024-04-10  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 39541
  • 日志数: 52
  • 建立时间: 2009-12-15
  • 更新时间: 2011-03-14

RSS订阅

Open Toolbar