zoukankan      html  css  js  c++  java
  • 简单总结:堆与栈的区别

    参考: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

  • 相关阅读:
    centos7下更新firefox
    Centos7宽带连接
    CAS和AQS
    java中锁的概念
    并发队列
    Callable和Future
    juc下的并发工具类和线程池
    死锁和线程安全的问题
    HashMap源码分析(java1.8)
    List集合框架面试题
  • 原文地址:https://www.cnblogs.com/feinaio2017/p/8331382.html
Copyright © 2011-2022 走看看