简单总结:堆与栈的区别

Posted feinaio2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单总结:堆与栈的区别相关的知识,希望对你有一定的参考价值。

参考:http://blog.csdn.net/cc214042/article/details/52728924

技术分享图片

使用堆与栈,一维数组

技术分享图片
 1 //定义长度为size的数组
 2 //在栈上
 3 int array[size];
 4 
 5 //在堆上
 6 //C++语法  new  delete
 7 int *array = new int[size]
 8 //释放
 9 delete[] array;
10 
11 //C语法
12 int *array =(int *)malloc(size)
13 //释放
14 free(array)
View Code

二维数组的使用

技术分享图片
 1 //在栈上创建
 2 int array[M][N]
 3 
 4 //传递给子函数
 5 void func(int array[M][N]){
 6 //M可以省略,N不能,编译器确定移动内存的间距
 7 }
 8 
 9 //在堆上创建 
10 //C++
11 int **array = new int*[M]
12 for(int i = 0; i < M; i++){
13     array[i] = new int[N];
14 }
15 
16 //C
17 (int **)malloc(M * sizeof(int*))
18 (int *)malloc(N*sizeof(int))
19 
20 //传递给子函数
21 void func(int **arr, int M, int N){
22 
23 }
24 
25 //释放
26 for(int i = 0; i < M; i++){
27     delete[] array[i];
28 }
29 delete[] array;
View Code

关于malloc  new  calloc 的比较:

参考:https://www.cnblogs.com/wgang171412/p/5046235.html

技术分享图片
 1 //原型
 2 void *malloc(int size);
 3 //使用
 4 int *p;
 5 p = (int *)malloc(sizeof(int))
 6 //返回类型为void* ,而new返回指定类型的指针,并自动计算所需要大小
 7 
 8 //new  数据类型
 9 //new  数据类型(初始值)
10 //new  数据类型(常量表达式)
11 
12 int *p1 = new int[100];
13 //返回类型为 int* 整数型指针,分配大小为 sizeof(int) * 100
14 
15 int *p2 = new int(2);
16 int *p3 = new int[1000];
17 
18 void *calloc(size_t numElements, size_t sizeOfElement);
19 //分配空间大小 = numElements * sizeOfElement
20 //malloc分配的空间可能被使用过,存在遗留数据
21 //calloc分配的空间会自动初始化为零
View Code

 

技术分享图片

以上是关于简单总结:堆与栈的区别的主要内容,如果未能解决你的问题,请参考以下文章

java中堆与栈的区别

堆与栈的区别

c++堆与栈的简单认识

java学习之堆与栈的区别

STM32的堆与栈与编译信息查看

堆与栈的比较