函数说明:
#include<stdio.h> #include<unistd.h> int main() { void* empty=sbrk(0); void * p1=sbrk(4);//虚拟内存映最少射一个内存页4096字节 int *pi=p1; *(pi+2)=120;//给p3赋值 void* p2=sbrk(4); void* p3=sbrk(4); printf("p1=%p,p2=%p,p3=%p\n",p1,p2,p3); sbrk(-8); sbrk(4093); printf("4097字节\n"); sleep(15); sbrk(-1); printf("4096字节\n"); sleep(15); sbrk(-4096); printf("0字节\n"); sbrk(123); double * pd=sbrk(0);//取最后空间的首地址 brk(pd+1);//分配一个double空间 int result=brk(empty);//回收所有 //printf("p1=%p,p2=%p,p3=%p\n",p1,p2,p3); //printf("p3=%d\n",*(int*)p3); return 0; }
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { //int * begin=sbrk(0); int *pi=sbrk(sizeof(int)); double *pd=sbrk(sizeof(double)); *pi=123; *pd=34.56; printf("*pi=%d,*pd=%g\n",*pi,*pd); brk(pd); brk(pi); printf("内存回收完毕!\n"); return 0; }
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/mman.h> #include<string.h> /* 内存映射: mmap(void* addr,size_t length, int prot,int flags,int fd,int off) addr-一般为NULL,内核选择映射首地址 length 大小,不足一个内存页补齐 prot-权限,PROT_READ|PROT_WRITE| flags-MAP_PRIVATE,MAP_SHARED 必选其一, 对内存无区别,对文件有区别 MAP_ANONYMOUS,映射物理内存,失败返回MAP_FAILED */ int main(){ void*p=mmap(NULL,4,PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,0,0);//分配 if(p==MAP_FAILED){//失败 perror("mmap"); return -1; } int *pi=p; *pi=100; char* st=p+4; strcpy(st,"mycpystr"); printf("%d,%s\n",*pi,st); munmap(p,4);//释放。 //printf("%d,%s\n",*pi,st);//已释放,引发段错误 return 0; }