zoukankan      html  css  js  c++  java
  • 内存分配的几个函数的简单对比分析

    今天在看<<改善c++程序的150个建议>>一书,了解到在栈上也可以动态分配内存,具体的方法是通过alloca函数来完成。i

    再次复习查看了一下C语言中的几个分配内存的函数,简单记录一下它们的异同点:

    1  void* malloc(unsigned size);

    向系统申请分配size个字节的内存空间,在堆中分配,分配后的内存空间必须在使用完后使用free函数释放。注意点,所分配的

    内存空间的内容是未处理过的,内容值不确定。

    2 void* calloc(size_t nelem,size_t elsize);

    该函数向系统申请分配一个能容纳nelem个元素,每个元素大小为elsize字节的内存空间,在堆中分配,一样要使用free来释放。

    和malloc不同的是,calloc函数分配好内存后,使用0初始化分配好的内存空间。

    3 void *alloca(size_t size);

    该函数从调用者的栈上分配size个字节的内存空间,不必使用free来释放,这个临时分配的空间会在调用alloca()的函数返回时自动释放。

    alloca也使用0初始化分配好的内存空间,由于是在栈上分配,效率较高,但是所分配空间的大小有限制,而且移植性较差。

    4 void *realloc(void *ptr,int size);

    该函数用来重调已分配好内存空间的大小,可以给所指定的内存空间进行扩大或缩小。在堆分配。

      

    你要安排你的未来
  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/jameszeng/p/2757952.html
Copyright © 2011-2022 走看看