内存分类

在进行C/C++编程时,需要程序员对内存的了解比较精准。经常需要操作的内存可分为以下几个类别:
栈区(stack ):由编译器自动分配和释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap ):一般由程序员分配和释放,若程序员不释放,程序节束时可能由操系统回收。注意它与数据结构中的堆是两回事,

分配方式倒是类似于链表。

全局区(静态区)( static ):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,
未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序节束后由系统释放。
文字常量区:常量字符串就是放在这里的。程序节束后由系统释放。

程序代码区:存放函数体的二进制代码

 1 //main .cpp
 2 int a=0//全局初始化区
 3 char *p1;//全局未初始化区
 4 main()
 5 {
 6 int b;//栈
 7 char s[]="abc";//栈
 8 char *p2;//栈
 9 char *p3=”123456";
10 //123456在常量区,p3在栈上
11 static int c =0
12 //全局(静态)初始化区
13 p1=(char*)mallac(10);
14 p2=(char*)ma工lac(20);
15 //分配得来的10和20字节的区域就在堆区
16 strcpy(pl;”123456”);
17 /1123456放在常量区,编译器可能会将它与
18 //P3所指向的“123456”优化成一个地方
19 }
时间: 2024-10-28 01:46:17

内存分类的相关文章

【C语言】C语言程序所占内存分类

参考"http://blog.sina.com.cn/s/blog_63d4849c01014qg3.html" C语言内存分为5部分:堆.栈.全局(静态)区.常量区(只读)和代码区. 堆,需要人工申请和释放内存,其他均为系统自动释放. 全局(静态)区.常量区:全局可见! #include <stdio.h> #include <malloc.h> int a=0;//初始化全局变量,存在“全局(静态)区(data)初始化”中,程序结束后由系统释放 char *

C/C++程序内存分类

程序中内存分类主要有以下几种: (1)栈存储区:主要存储局部变量.函数参数.函数返回值等. 栈内存由编译器在需要时自动分配,使用完后自动释放. (2)堆存储区:由new.malloc申请到的空间. 需要程序员自己申请,使用完后要及时释放,否则会造成内存泄露. (3)全局数据区(静态数据区):存储程序中的全局变量和静态变量.已初始化的变量和未初始化的变量分开存储,但在相邻的存储区域. 程序结束由系统释放. (4)文字常量区:存储常量字符串.程序结束由系统释放. (5)程序代码区:存放函数体的二进制

浅谈内存分类等等

在进行C/C++以及嵌入式开发的时候要对内存的了解比较精确,经常要操作的内存分类可以如下:栈区(stack).堆区(heap).常量区.静态区(全局区)(static).代码区. 栈区由编译器自动分配和释放,一般存放函数的参数.局部变量的值等,操作和数据结构中的栈的操作类似. 堆区由程序员自己分配与释放,如果程序员不释放,则在程序运行完后,可能由系统收回,它与数据结构中的堆是不同的概念,分配方式与链表类似,可以用malloc.new来申请, 全局区(静态区)存放全局变量.全局静态变量.局部静态变

由C/C++编译的程序占用的内存分类

一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) : 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵. 3.全局区(静态区)(static):,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区

SQL Server 的内存分类

第一类. 根据申请方式分: commit 型 它是指先reserve申请一大块,再通过commit提交后得到的空间.这种方式申请到的空间可以启用 awe ! stolen型 与commit 相对应!它不用reserve只是直接申请.它不能申请 AWE 扩展出的内存. 第二类. 根据申请空间的大小分: single page allocation(buffer pool)型: 如果要申请的空间大小小于8KB SQL Server会慷慨的分给8KB(一个数据页)! multiple page all

深入java内存模型(一)

最近本来想深入学习一下java线程,很想知道其中实现的原理,比如线程资源的共享,线程私有空间,以及线程直接的同步控制等.如果能了解它的实现,对于深入学习线程,会有很大的帮助.最近正在看一份<深入java内存模型>的资料.讲的就是java线程方面的实现原理,拿出来分享一下. 说到线程,我们首先想到的是线程的通信.学习操作系统时,线程通信有两种,一种是通过共享内存,另一种是通过消息传递.共享内存属于隐式的通信,线程之间共享一块内存,线程都可以往这块内存写数据,读数据就实现了通信.而消息传递时一个显

C语言中的编译时分配内存

1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等: 2.堆区(heap) --由程序员分配释放: 3.全局区或静态区 --存放全局变量和静态变量:程序结束时由系统释放,分为全局初始化区和全局未初始化区: 4.字符常量区 --常量字符串放与此,程序结束时由系统释放: 5.程序代码区--存放函数体的二进制代码 例: //main.c int a=0; //全局初始化区 char *p1; //全局未初始化区 void main() { int b; //栈 char

什么变量在堆内存里存放,什么变量在栈内存里存放

什么变量在堆内存里存放,什么变量在栈内存里存放 堆和栈的区别 (stack and heap) 一般认为在c中分为这几个存储区 1栈 - 有编译器自动分配释放 2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域. 程序结束释放. 4另外还有一个专门放常量的地方. - 程序结束释放 在函数体中定义的变量通常是在栈上,用mal

[国嵌攻略][039][我从内部看内存]

内存分类 1.DRAM(动态RAM) 它的基本原件是小电容,电容可以在两极板上保留电荷,但是需要定期的刷新,否则数据会丢失.缺点是由于要定期刷新存储介质,存取速度较慢 DRAM分类: 1.1.SDRAM 同步动态随机存储器 同步:内存工作时需要有同步时钟,内部的命令的发送与数据的传输都是以该时钟为基准的 动态:存储阵列需要不断的刷新来保证数据不丢失 随机:是指数据不是线性依次存储,而是自由指定地址进行数据读写 1.2.DDR(Double Data Rate SDRAM双倍速率同步动态随机存储器