我们说的堆(heap) 是程序员申请的内存空间,在C/C++中,你可以理解为:所有非常量的指针空间。和heap对应的,还有栈(stack)、静态区(static)、常量区(const),以及程序代码区。这些都是程序运行所需要申请的内存空间。
heap堆和其它内存区的主要差别,一个是heap是由程序员申请、释放和管理的(而不是由系统和程序自动分配和释放),是动态的;另外一个就是,其它区域都是有固定大小的,而heap的大小,仅仅受到内存和虚拟内存大小的限制,也就是说,理论上你可以申请的堆空间是无限大的。
例子:main() {const char* m = "123";//"123" 常量区,m在栈(指针的本身都在栈,下同)char s[] = "abc"; //常量区char *p3 = "123456"; //常量区static int c =0; //全局(静态)初始化区 char *p1,*p2;p1 = (char *)malloc(10); //分配得来得10字节的区域就在堆区。 p2 = new char[20]; //分配得来得20字节的区域就在堆区。
C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
2019-11-29 广告
c: malloc函数申请,比如:void *buf = malloc(1024);/* 申请1024Bytes */,释放时使用free(buf);
c++: new关键字申请,当然也可以使用malloc. int *buf = new int[1024];/* 申请 1024*sizeof(int)Bytes */,释放时使用delete buf;
堆(heap) 是程序员申请的内存空间,在C/C++中,你可以理解为:所有非常量的指针空间。
和heap对应的,还有栈(stack)、静态区(static)、常量区(const),以及程序代码区。这些都是程序运行所需要申请的内存空间。
heap堆和其它内存区的主要差别,一个是heap是由程序员申请、释放和管理的(而不是由系统和程序自动分配和释放),是动态的;另外一个就是,其它区域都是有固定大小的,而heap的大小,仅仅受到内存和虚拟内存大小的限制,也就是说,理论上你可以申请的堆空间是无限大的。
例子:
main()
{
const char* m = "123";//"123" 常量区,m在栈(指针的本身都在栈,下同)
char s[] = "abc"; //常量区
char *p3 = "123456"; //常量区
static int c =0; //全局(静态)初始化区
char *p1,*p2;
p1 = (char *)malloc(10); //分配得来得10字节的区域就在堆区。
p2 = new char[20]; //分配得来得20字节的区域就在堆区。
free(p1);//需要自己释放
delete p2;//需要自己释放
}
当程序运行的时候,系统自动为程序分配一块内存,这片内存是空的。
每当你使用malloc或者new的时候,你新声明的变量就都会被存入这片内存。
使用完毕之后如果你不及时地free(p)或者是delete之前声明的变量的话,堆中刚占用的内存就不会释放。这也是很常见的内存泄漏问题。
非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!
堆和栈的区别
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代
参考资料: http://tieba.baidu.com/f?kz=150791801