C指针原理(81)-内存管理与控制

C语言的stdlib库提供了内存分配与管理的函数:

1、通过调用callocmallocrealloc所分配的空间,如果连续调用它们,不能保证空间是顺利或连续的。当分配成功后,函数将返回一个指针,这个指针指向分配成功的空间的开始位置, 它可以被指向任意类型的对象,当分配空间失败后,返回NULL指针。

2、通过free函数释放空间。

麦好的AI乐园博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


3、函数说明

(1)calloc函数

函数的原型为:

void *calloc(size_t nmemb,size_t size);

nmemb个对象的数组分配空间,每个元素的大小为size,分配的空间所有位被初始为0

(2)free函数

函数的原型为:

原型:extern void free(void *ptr);

释放指针ptr所指向的的内存空间。ptr所指向的内存空间必须是用calloc,malloc,realloc所分配的内存。如果ptrNULL或指向不存在的内存块则不做任何操作。

释放的空间还可以被重新分配,

(3)malloc函数

void *malloc(size_t  size);

分配长度为size字节的内存块。如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。

(4)realloc函数

void *realloc(void *ptr, size_t size);

改变ptr所指内存区域的大小为size长度。如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。新分配空间比空间大,并包括原空间的的内容,但因为分配新空间,没有初始化0的操作,所以新空间中除去旧空间的部分的内容不能保证清空为零。

4、C语言中数据对象空间分配原理
C语言中的数据对象存储在以下3种空间中:

(1) 程序在开始执行前,分配 静态存储空间,并进行初始化,如果没有指定数据对象的初始值,则每个标题 的值 初始化为零。这样的数据对象在程序结束前一直存在。

(2) 程序在每一个程序块的入口分配动态存储空间。如果没有指定数据初始值,它的初始内容不确定,可能上次程序使用释放过的内存内容(释放内存本身并不清空内存中的数据,只是标记这块内存操作系统可重新使用)。 这些数据对象在程序块执行完毕前一直存在。

(3) 调用callocmallocrealloc时,程序才分配可被程序员人为操纵的存储空间,仅当调用calloc时,空间才被初始化。这样分配的数据对象要用free函数释放。否则将生存到程序结束。

5、堆的原理 

静态存储空间存在在于程序的整个执行过程 中,动态 存储空间是后进先出,可用栈实现。

动态存储空间经常与函数调用与返回数据一起使用堆栈。可被人为操纵的存储空间不遵守这个规定。C语言的标准库维持着叫“堆”的空间池来控制被callocmallocrealloc函数分配的存储空间。

 

 

麦好的AI乐园博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/

你可能感兴趣的:(算法,操作系统,C语言,栈,内存分配)