以前都在C++中new一个内存空间,在C中,就得用另一函数malloc申请自己指定大小的内存空间,如果想动态申请内存空间可以使用relloc函数。
void *mallco(int size);
malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针,可以强制转换为任何其它类型的指针。
需要注意的是,
1、malloc 函数返回的是 void * 类型,定义的哪种类型的指针,必须强转为此类型指针,比如 p = (int *) malloc (sizeof(int)*2);因为不能将 void* 赋值给 int * 类型变量,所以必须通过 (int *) 来将强制转换。
2、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。如果你写成:int* p = (int *) malloc (1);代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”,在free的时候也会出现堆栈冲突的错误。
3、malloc是必须指定内存大小的空间,比如想分配50个int类型的空间:int* p = (int *) malloc ( sizeof(int) * 50 ); //分配可以放得下50个整数的内存空间。
malloc 也可以达到 new [] 的效果,但是malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。
void *realloc(void *mem_address, unsigned int newsize);
先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。他的作用就是重新申请内存空间,不影响原有数据,但是新分配的地址可能不一样了。
需要注意的:
1、如果mem_address为null,则realloc()和malloc()类似。分配一个newsize的内存块,返回一个指向该内存块的指针。如果没有足够可用的内存用来完成重新分配(扩大原来的内存块或者分配新的内存块),则返回null而原来的内存块保持不变。
2、如果有足够空间用于扩大mem_address指向的内存块,则分配额外内存,并返回mem_address这里说的是“扩大”,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的 空闲空间用来分配,加上原来的空间大小= newsize。得到的是一块连续的内存。
3、如果原来内存大小没有足够的空间来分配,那么就会从堆栈中另找一块指定大小的内存,并把原来的内存空间的内容复制归来,返回心的mem_address指针,以前的被放回堆栈。
分享到:
相关推荐
malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数...
malloc 函数详细说明 malloc 函数是 C 语言库函数,用于动态分配内存空间。它是 C 语言中最基本的内存管理函数之一,广泛应用于各种编程场景中。 头文件 为了使用 malloc 函数,需要包含 stdlib.h 头文件。stdlib....
我写的malloc函数 用c语言实现 增加了合并内存释放内存的功能
malloc函数是动态分配内存的重要的函数,看完该文,轻松学会使用malloc函数
《深入理解malloc:自己动手写内存分配函数》 在计算机编程中,`malloc`函数是C语言标准库中用于动态内存分配的关键函数,它允许程序在运行时请求任意大小的内存块。`malloc`的全称是“memory allocation”,即内存...
C语言中的`malloc`函数是动态内存管理的重要工具,它允许程序在运行时根据需要分配内存,而不是在编译期间预设固定的内存空间。这种方式提高了程序的灵活性,尤其是在处理不确定大小的数据结构或需要动态扩展内存的...
`malloc`函数是C语言中用于动态内存分配的关键函数,它是C标准库`stdlib.h`的一部分。`malloc`函数允许程序在运行时根据需要请求内存,这对于处理不确定大小的数据结构或者在程序执行过程中动态创建对象非常有用。让...
malloc函数及用法 malloc函数是C语言中的动态内存分配函数,它允许程序员在程序执行过程中动态地分配内存空间。该函数的使用使得程序员可以根据实际情况动态地分配内存空间,从而提高程序的灵活性和效率。 malloc...
基于linux系统用c++实现malloc函数,实现动态分配回收内存地址空间
堆区则是程序员通过`malloc()`等函数手动进行内存分配的地方,它的大小相对较大,但需要程序员自行管理内存的申请与释放。 `malloc()`函数的原型如下: ```c void* malloc(size_t size); ``` 其中,`size_t size`...
在Linux环境中,malloc并非直接与内核交互。而是通过glibc(GNU C Library)的堆管理器来处理内存分配和释放。当我们调用free释放内存时,内存并不是立即归还给操作系统,而是回到glibc的堆管理器。glibc会有一套...
《malloc函数在Linux系统下的原理性实现》 malloc函数是C语言中用于内存动态分配的重要工具,它允许程序在运行时根据需要分配内存,极大提高了编程的灵活性。然而,在Linux系统下,malloc函数并不是直接可用的,这...
malloc函数的用法
malloc函数介绍及示例
使用`malloc()`函数时,一般建议与`sizeof`运算符配合,确保分配的内存大小与实际需要的数据类型匹配。`sizeof`运算符用于获取C语言中数据类型或变量所占的字节数。例如,如果你需要分配一个`int`类型的变量,可以...
malloc和free函数是C语言标准库提供的两个关键函数,用于动态内存分配和释放。 1. **malloc函数**: malloc函数允许程序员在程序运行时动态地分配内存。它的原型是`void* malloc(size_t size)`,其中`size`参数...