存储分配方式
储存分配方式
操作系统会为了一个准备好运行的程序分配内存空间,包括四个部分:代码区、全局变量和静态变量区、栈区、堆区。
1、代码区:用来存放程序的指令。
2、全局变量和静态变量:用于存放全局变量、常量以及static存储的局部变量的内存分配。
3、栈区:用于存放局部变量、函数的形参、函数返回地址等内存分配。
4、堆区:用于存放变量的动态内存的分配。
对程序实体的内存分配可以采用三种存储分配方式:静态分配、自动分配、动态分配
静态分配:程序运行前,由编译器编译的时候进行的内存分配,且到整个程序运行完才释放内存空间(对应全局变量和静态变量区)
自动分配:在程序执行的时候才对其进行分配内存,执行完代码段或函数后就释放空间(对应栈区)
动态分配:有需要才进行内存分配,运行完手动释放内存空间(堆区)
1.free()函数
函数原型:void free(void *ptr)
功能说明:释放由ptr指示的存储块
参数说明:ptr为指向被释放存储块的指针
2.malloc()函数
函数原型:void malloc(site_t size)
功能说明:从堆空间中分配大小为size个字节的内存空间给本函数的调用者。
参数说明:size指出要求分配的内存空间大小(单位:字节)
返回值:如果分配成功,返回存储块的首地址;否则返回空指针(NULL)。
3.calloc()函数
函数原型:void calloc(size_ t nmemb,size_t size)
功能说明:从堆空间中分配num*size字节的内存空间给本函数的调用者。
参数说明:size为所要分配内存单元的对象大小(所占的字节),nmemb为所要分配内存单元的对象数。
返回值:如果分配成功,返回存储块的首地址;否则返回空指针(NULL)。
4.realloc()函数
函数原型:void *realloc(void *ptr ,size_t size)
功能说明:该函数用于为某(些)对象重新分配存储单元,它将指定对象原来所占据的由ptr指针所指向的存储单元的大小改为size参数所指定的大小。
参数说明:ptr指向为某对象原来分配的内存块的首地址,size指出该对象所占据的存储快的新的大小(字节数)。
返回值:如果分配成功,返回存新储块的首地址;否则返回空指针(NULL)。