C/C++程序内存分类

程序中内存分类主要有以下几种:

(1)栈存储区:主要存储局部变量、函数参数、函数返回值等。

栈内存由编译器在需要时自动分配,使用完后自动释放。

(2)堆存储区:由new、malloc申请到的空间。

需要程序员自己申请,使用完后要及时释放,否则会造成内存泄露。

(3)全局数据区(静态数据区):存储程序中的全局变量和静态变量。已初始化的变量和未初始化的变量分开存储,但在相邻的存储区域。

程序结束由系统释放。

(4)文字常量区:存储常量字符串。程序结束由系统释放。

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



时间: 2024-08-25 23:16:20

C/C++程序内存分类的相关文章

【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++服务器程序内存泄露问题分析及解决

由 www.169it.com 搜集整理 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题:Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考

浅谈内存分类等等

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

Unix下C程序内存泄露检测工具:valgrind的安装使用

Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. Valgrind的安装和使用 去官网www.valgrind.org下载最新版本的valgrind,我这里下载的是valgrind 3.11.0.tar.bz2. #tar xvf valgrind

指针知识梳理5-字符串与指针,程序内存总结

一.文字常量区域 #include <stdio.h> int main() { char *p = "hello"; int i = 0; for(i = 0;i<6;i++) { printf("%c",*(p+i)); } *p = '1'; } 大家分析验证以上代码.p 是一个指针变量,存储地址,"hello"是一个字符串占6个字节,当我们用printf的时候可以输出"hello",我们得出结论,p存

1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式

 1.打印二进制机器码(分别表示32位的和64位的) #include <stdio.h> /*按照8位的长度打印一个数值*/ void dis8bit(char val) { int bit = 8; while(bit--) { if(1<<bit&val){ printf("1"); } else { printf("0"); } if(!(bit%4)) printf(" "); } putchar(1

C++程序内存泄漏检查

一.在windows平台上面:以前我都是用purify,因为没有正版的,很是麻烦. 后来我开始用windows自带的umdh,也很好用:http://support.microsoft.com/kb/268343/en-us摘要一下步骤如下: 1.准备工作: 1 gflags -i <application name> +ust 注:得先把gflags和umdh的路径加入到Path中,默认为:C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x

一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)

各位看官们,大家好.上一回中咱们说的是C程序内存布局的样例,这一回咱们继续说该样例.闲话休提,言归正转.让我们一起talk C栗子吧. 看官们,关于C程序内存布局的样例,我们在前面的两个章回都介绍过了,这一回我们将对前面章回中的内容进行总结和提示. 内存布局总结 C程序的内存布局主要有四个分区:代码区,数据区(data和bss).堆区和栈区.能够使用readelf -S filename查看各个分区的内存地址.这四个分区在内存中从低地址空间開始依次向高地址延伸.我们再次使用前面章回中的图直观地展

【KEIL&#183;单片机&#183;扫盲贴】关于ARM单片机程序内存使用情况的细致讨论。

接触了两年多时间的单片机编程本人对关于单片机程序内存如何耗费的问题一直懵懵懂懂,直到在近日看到某篇有关于MDK MAP文件介绍的帖子后才有种醍醐灌顶的感觉,这里我将分享在此之上的观点与见解以供大家讨论学习. 大家都知道ARM单片机的内部存储空间极其匮乏无论是从Flash还是RAM上,每每给单片机机编程都有一种惜字如金的感觉,工程师们一般会在容量有限的情况下规范其编程习惯简化代码避免冗余,那么首先我们如何知道的程序下载到单片机上到底占用了多少Flash程序运行又会使用多少RAM? 首先上一张图: