zoukankan      html  css  js  c++  java
  • 【技巧】动态分配内存的一个简便用法

      动态申请和分配堆空间的内存一般需要用到:
      
    申请一块连续的 size 大小的内存块区域:

    void* malloc(unsigned int size);
    

    申请一块连续的 size 大小的内存块区域:(并置0)

    void* calloc(unsigned int num,unsigned int size);
    

    扩展或缩小一块原有的内存块区域,保留原数据:

    void*realloc(void *mem_address, unsigned int newsize);
    

    释放空间:

    void free(void *ptr)
    

    1.等价于 malloc ()

      在实际使用中,我们总是先调用 malloc() / calloc() ,然后通过 realloc() 来动态管理内存区域。
      有时候这会是一种很笨拙的做法,例如我们需要的内存空间可能存在没有任何成员的情况,那么我们每次操作之前还需要判断内存区域长度,然后决定是否要先使用 malloc() 来申请空间。
      例如:

    if(arr_size == 0)
    	arr = (int*)malloc(size);
    else
    	arr = (int*)realloc(arr, size);
    

    然而,实际上我们可以只使用 realloc()

    arr = (int*)realloc(arr, size);
    

    只要当原空间没有任何成员时,arr 指向 NULL 就可以这样用。
    此时:

    arr = (int*)realloc(arr, size);//arr == NULL
    
    **等价于**
    
    arr = (int*)malloc(size);
    

    2.等价于 free()

    realloc() 的 size 为 0
    则:

    arr = (int*)realloc(arr, size);//size == 0
    arr = NULL;
    
    **等价于**
    
    free(arr);
    arr = NULL;
    

    这样可以让代码变得更加简洁和适用。

  • 相关阅读:
    MyStreamRequestHandlerr
    SocketFromServer
    MyQMainWindowDemo
    MyQThread
    Nginx安装与配置
    nginx软件优化
    MySQL优化实施方案
    tomcat优化方向
    Tomcat优化方案
    Nginx和Tomcat优化
  • 原文地址:https://www.cnblogs.com/gaolihai/p/13149767.html
Copyright © 2011-2022 走看看