c内存管理 c内存管理使用malloc, calloc, realloc和free函数提供了对动态内存分配(heap)的支持。 malloc 分配但不初始化内存,大小为size个字节数。 #include <stdlib.h> void *malloc(size_t size); 不必对malloc返回的指针做强制类型转换,因为在赋值的时候自动转了。 if (char *pmem = malloc(100 * sizeof(char)) == NULL) {} calloc 分配并初始化内存,大小为size个字节数。 #include <stdlib.h> void *calloc(size_t nmemb, size_t size); 返回一个指向包含nmemb个元素的数组的指针,数组中每个元素的大小为size个字节。 nmemb:内存块的数组的个数,竖轴方向。 size:内存块的数组的大小,横轴方向。 realloc 能够改变以前分配的内存块的大小。 #include <stdlib.h> void realloc(void *ptr, size_t size); size既可以大于也可以小于原来的大小。 free 释放内存。 内存映像文件 内存映像文件有两个主要的优点。 首先,它可以加速文件I/O操作,因为最快的磁盘操作也要比内存慢。 其次,可以进程间共享数据。 mmap mmap把一个磁盘文件映像到内存中。 #incude <unistd.h> #include <sys/mman.h> void *mmap(void *start, size_t length, int port, int flags, int fd, off_t offset); munmap 解除内存映像并释放内存。 msync 把被映像的文件写入磁盘。 int msync(const void *start, size_t length, int flags); 锁定内存 内存加锁意味着防止一块内存区域被交换到磁盘上。 mlock, munlock, mlockall, munlockall, #include <unistd.h> #include <sys/mmap.h> |