linux内存函数


LinuxC语言内存分配函数
1、void *alloca(size_t size),用来配置size个字节的内存空间,和mallac/calloc不同的是,alloca是从栈空间(stack)中配置内存,因此在函数返回时会自动释放此空间。
int *a;  
a = (int *)alloca(sizeof(int));
*a = 1;

2、void *calloc(size_t nmemb,size_t size),用来分配nmemb个相邻的内存单元,每一单元的大小为size,返回指向第一个元素的指针。在利用calloc配置内存时会将内存内容初始化为0
int *ptr;  
ptr = (int *)calloc(10,sizeof(int));  
for (int i = 0;i < 10;i++){ 
printf("%d\n",ptr[i]); 
}

3、void free(void *ptr),参数ptr为指向由malloc,calloc,realloc所返回的内存指针。调用free后ptr所指的内存空间便会被收回。
free(ptr);

4、size_t getpagesize();返回一分页的大小,单位为字节,在Intek x86上其返回值是4096
printf("Page Size = %d\n",getpagesize());

5、void *malloc(size_t size);用来分配内存空间,大小有指定的size决定
int *p ;
p = (int *)malloc(1024);

6、void *mmap(void *start, size_t length, int prot, int flags,
    int fd, off_t offset);建立内存映射,用来将某个文件内容映射到内存中,对该内存区域的存取即是直接对该文件内容的读写。
参数start指向欲对应的内存起始地址,通常设为NULL,代表让系统自动选定地址,对应成功后该地值会返回。
参数length代表将文件中多大的部分对应到内存。
参数prot代表映射区域的保护方式,有以下组合:
参数flags指定映射对象的类型,映射选项和映射页是否可以共享。
fd:有效的文件描述词
offset:被映射对象内容的起点,通常设置为0,代表从文件最前方开始对应,offset必须是分页的整数倍
成功执行时,mmap()返回被映射区的指针,munmap()返回0。失败时,mmap()返回MAP_FAILED[其值为(void *)-1],munmap返回-1。  


7、int munmap(void *start,size_t length);解除内存映射,当进程结束或利用exec相关函数来执行其他程序时,映射内存会自动解除,但关闭相应的文件描述词并不会解除映射。

8、void *realloc(void *ptr,size_t size);参数ptr为指向由malloc,calloc,realloc所返回的内存指针,而参数size为新配置的内存大小,其值可比原内存大或小。
若参数size值比原配置空间较小,内存内容并不会改变,且返回的指针为原来内存起始地址;但若size值较原配置空间大,则realloc不一定会返回原先的指针,
原先的内容虽不会改变,但新多出的内存则未设置处初值。若size为0,则相当于调用free(ptr)
char *a,*b;  
a = (char *)malloc(10*sizeof(char));
for (int i = 0; i < 10;i++){
a[i] = 'a';
}
 
*(a + 10) = '\0';
printf("before realloc: a = %x [%s]\n",a,a); 
b = (char *)realloc(a,10960);
printf("after realloc: a = %x [%s]\n",b,b);


9、void *sbrk(ptrdiff_t increment);用来增加程序可用的数据空间,增加大小有参数increment决定。

10、int brk(void *end_data_segment)用来依参数 end_data_segment所指的数值设成新的数据字节范围。调用成功返回0,失败返回-1

 

posted on 2014-05-08 18:02  kangbry  阅读(425)  评论(0)    收藏  举报

导航