`
iwebcode
  • 浏览: 1997265 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

alloca malloc realloc calloc

 
阅读更多
  1. alloca是在栈里分配内存
    另外
    个是在堆里分配内存。

  2. 三个函数的申明分别是:
    void*realloc(void*ptr,unsignednewsize);
    void*malloc(unsignedsize);
    void*calloc(size_tnumElements,size_tsizeOfElement);
    都在stdlib.h函数库内
    它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL
  3. malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
    char*p;
    p=(char*)malloc(20);
  4. 通过malloc函数分配得到的内存空间是没有被初始化的

  5. calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如:
    char*p;
    p=(char*)calloc(20,sizeof(char));
    这个例子与上一个效果相同
  6. calloc与malloc函数的一个显著不同时是,calloc函数得到的内存空间是经过初始化的,其内容全为0。calloc函数适合为数组申请空间,可以将size设置为数组元素的空间长度,将n设置为数组的容量

  7. realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度
    :char*p;
    p=(char*)malloc(sizeof(char)*20);
    p=(char*)realloc(p,sizeof(char)*40);
  8. 如果newsize小于或等于ptr之前指向的空间大小,那么保持原有状态不变。如果newsize大于原来ptr之前指向的空间大小,系统将重新为ptr从堆上分配一块大小为newsize的内存空间;同时,将原来指向空间的内容依次复制到新的内存空间上,ptr之前指向的空间被释放。realloc()如果没有足够可用的内存用来完成重新分配(扩大原来的内存块或者分配新的内存块),则返回null.而原来的内存块保持不变.

分享到:
评论

相关推荐

    alloca2:不安全的 C 的 alloca() 的替代品。 简单易用的单头文件解决方案

    当分配可以在编译时(由编译器)计算的固定大小时, alloca() 和 alloca2() 都比 malloc() 快十倍左右。 把它当作一个大概的数字,因为它会因系统到系统和编译器到编译器而异。 对于可变大小的分配( alloca() 和 ...

    《你必须知道的495个C语言问题》

    *p=malloc(10); 4 声明风格 4 1.7 怎样声明和定义全局变量和函数最好? 4 1.8 如何在C中实现不透明(抽象)数据类型? 5 1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 5 ...

    C 程序经典900例(上)

    #include <malloc.h> void some_function(size_t size) { int i; char *pointer; char stack_fix[1]; stack_fix[0] = NULL; if ((pointer = alloca(size)) == NULL) printf("Error allocating %u bytes ...

    C语言FAQ 常见问题列表

    char *p = malloc(10); 编译器提示 ``非法初始式" 云云。 o 2.13 以下的初始化有什么区别?char a[] = "string literal"; char *p = "string literal"; 当我向 p[i] 赋值的时候, 我的程序崩溃了。 o 2.14 我总算弄...

    你必须知道的495个C语言问题

    *p=malloc(10); 声明风格 1.7 怎样声明和定义全局变量和函数最好? 1.8 如何在C中实现不透明(抽象)数据类型? 1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 ...

    用c 语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()

    请求指正建议,与君共勉: 用c 语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free(),其中,空闲分区通过空闲分区链来管理;在进行内存分配时,系统优先使用空闲区低端的空间。...

    你必须知道的495个C语言问题(PDF)

    char *p = malloc(10); 编译器提示“非 法初始式” 云云。. . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.13 以下的初始化有什么区别?char a[] = "string literal"; char *p = "string literal"; 当我...

    buddy:一个简单的伙伴分配器

    malloc/free 函数的代码不超过 60 行。 没有递归函数。 只要您了解伙伴分配器是什么以及它的用途,代码就简单明了。 还没有彻底的测试。 随意测试它,错误报告将不胜感激。 我将在一些微控制器 (MCU) 项目中使用它...

    Turbo C++ 3.0[DISK]

    Welcome to Turbo C++ Version 3.0 -------------------------------- This README file contains important information about Turbo C++. For the latest information about Turbo C++ and its accompanying ...

    Turbo C++ 3.00[DISK]

    Welcome to Turbo C++ Version 3.0 -------------------------------- This README file contains important information about Turbo C++. For the latest information about Turbo C++ and its accompanying ...

    tencent-C,C++安全指南.md

    tencent代码安全指南代码规范,C,c++安全指南完整版 # 代码安全指南 面向开发人员梳理的代码安全指南,旨在梳理API... + [1.3 尽量减少使用 _alloca 和可变长度数组](#1.1.3) [1.4 printf系列参数必须对应](#1.1.4)

    cfi:玩具二进制文件与-fsanitize = safe-stackcfi一起玩

    alloca:不可利用的二进制文件,带有-fsanitize=safe-stack以显示alloca(3)行为 安全堆栈: -fsanitize=safe-stack safe-stack-plain:相同的二进制文件,不带-fsanitize=safe-stack struct-call: -fsanitize=...

    Seccon-CTF-2016-cheer_msg

    样本来自2016年的Seccon ctf的一道pwn题,该题目使用了alloca内存分配函数,该函数不同于一般堆上的内存分配,而是在栈上进行。题解:https://blog.csdn.net/A951860555/article/details/114011564

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)

    主要介绍了Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)错误的解决方法,需要的朋友可以参考下

    google C++ 风格指南 - 中文版

    5.4. 变长数组和 alloca() 5.5. 友元 5.6. 异常 5.7. 运行时类型识别 5.8. 类型转换 5.9. 流 5.10. 前置自增和自减 5.11. const 的使用 5.12. 整型 5.13. 64 位下的可移植性 5.14. 预处理宏 5.15. 0 和 ...

    matlab代码左移-disparity-map:计算给定2张图像的视差图

    matlab代码左移视差图计算器-C ++示例: 给定的模板函数计算给定的2个立体图像的视差图。 由于易于实现和理解,因此我们遵循该算法。 我们为此项目使用OpenCV 3.4.2,它是在linux系统上构建的。...alloca

    stackalloc-rs:一个安全的库,用于在运行时在Rust中在堆栈上分配任意大小的数据

    提供Rust的方法,以一种安全的方式访问和使用运行时堆栈分配的缓冲区(例如C VLA或alloca()函数。)这是通过一个辅助函数来完成的,该函数采用一个FnOnce的闭包,该函数将堆栈分配的缓冲区分片作为一个FnOnce闭包。...

    OPTIMAL RATE ALLOCATION FOR LOGO WATERMARKING

    Based on multi-level wavelet decomposition of both host and logo images, a well-known HVS model is applied to locate the visually insensitive area in the host for embedding, while the rate alloca

Global site tag (gtag.js) - Google Analytics