C里面的内存动态分配函数与存储类别
来源:互联网 发布:淘宝上的棉被 编辑:程序博客网 时间:2024/06/05 18:07
在C里面,一共有四个内存动态分配函数,在“stdlib.h“或者在“alloc.h“中定义,分别介绍如下:
(1) void *calloc(unsigned num, unsigned size),其中,返回值是一个void类型的指针,在C中void类型的指针,可以赋值给任意类型的指针,这样,就可以得到任意类型的空间了,其中num参数表示块的多少,size表示每块的大小,其单位是字节,比如用void *calloc(10, sizeof(int))可以得到一个10个int数的空间。最常用的是 stru *struLP=calloc(2,sizeof(stru))就可以得到两个stru结构体的空间大小了。
(2) void *malloc(unsigned size),本函数的功能相当于*calloc(1, unsigned size)也就是得到的是一个size大小的内存空间。
(3) void *realloc(void* buffer, unsigned newsize),本函数会将buffer指针的空间,变为newsize大小,如果newsize比oldsize(用来表示原来buffer的空间大小)大,那么存储区中的内容肯定不变,如果newsize比oldsize小,那么,原先的一些内容将无法保存,调用这个函数之后,buffer的首地址,可能与原先的buffer首地址不一样了。
(4) void free(void* buffer),本函数将释放buffer所指向的存储区。
C里面一共有三种存储区,分别是静态区(数据段),动态区(堆栈段)以及CPU的通用寄存器区,其中,静态区和动态区都在内存上,而通用寄存器用的是CPU上的空间,C支持四种存储类别,分别是:
(1) auto:自动类型,存储于计算机的动态存储区,因此,一定都是局部变量,其作用域仅限于函数内,函数运行结束之后,就会自动的释放空间,一般来讲,我们在函数内部定义的时候,都省略auto,而将auto int i;直接写成int i;这是最常用的存储类型。
(2) registers:寄存器类型,存储于CPU的通用寄存器上,因为位于CPU上,所以,这样类型的变量不能很多,一般不超过2个,一般通用寄存器是16位,所以,超过16位的变量类型,不能使用寄存器类型的存储方式,比如double,float等。寄存器类型的变量的使用能够直接于CPU通信,因此,省掉了内存存取的时间,如此,可以提高程序的运行速度。
(3) static:静态类型,和extern一起,位于静态存储区,static类型的变量,不会因为函数的结束而释放空间,而是一直到程序的结束,static类型的变量,只有在定义的时候进行初始化,如果没有进行初始化,系统会自动初始化,一般初始化为0,而初始化的语句,在初始化之后,都不会再次执行。
(4) extern:外部类型,也是存储在静态区的变量,这种变量,在函数外部定义,定义的时候,分配内存,在函数中,当碰到extern的时候,系统不会为这个变量分配空间,而是到外部去搜寻这个变量。
- C里面的内存动态分配函数与存储类别
- object-c 内存里面压缩与解压缩的函数
- object-c 内存里面压缩与解压缩的函数
- object-c 内存里面压缩与解压缩的函数
- c中内存分配&变量的存储类别
- C与C++中动态分配与释放内存的区别
- 详解c语言中动态分配内存的函数
- C语言的动态分配内存
- C与C++动态分配,释放内存的区别
- C与C++动态分配,释放内存的区别
- C与C++动态分配,释放内存的区别
- C与C++动态分配,释放内存的区别
- C++【堆内存的动态分配与释放(new/delete)】
- C/C++动态分配与释放内存的区别详细解析
- C与C++动态分配,释放内存的区别
- C++ 与C语言 动态分配内存的区别
- C/C++动态分配与释放内存的区别详细解析
- C语言的存储类别
- 读书笔记(1)--COM是一个更好的C++
- trigger oracle
- FAT file system-FAT Volume Initialization
- 转:十个习惯让你精通新的开发技术
- FAT file system-FAT32 FSInfo Sector Structure
- C里面的内存动态分配函数与存储类别
- 发布订阅
- FAT file system-Backup Boot Sector
- matlab中特殊字符的显示
- 管托是什么
- 用户体验测试的自动化实现 - 检查字体设置
- Java:进化的尽头
- 第二人生的源码分析(七十三)LLFeatureManager类分析特性文件
- 坚强些吧!我还要走下去!