UC编程03-内存分配与内存映射函数sbrk/brk/mmap/munmap

简介: 函数说明: #include#includeint main(){ void* empty=sbrk(0); void * p1=sbrk(4);//虚拟内存映最少射一个内存页4096字节 int *pi=p1; ...

函数说明:



#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;
}


相关文章
|
15天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
24 0
|
26天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
26 0
|
26天前
|
编译器 C语言 C++
【C语言】memcpy()函数(内存块拷贝函数)
【C语言】memcpy()函数(内存块拷贝函数)
42 0
|
1月前
|
存储 Linux 编译器
Linux C/C++ 编程 内存管理之道:探寻编程世界中的思维乐趣
Linux C/C++ 编程 内存管理之道:探寻编程世界中的思维乐趣
50 0
|
3天前
|
编译器 C语言
字符串与内存函数
字符串与内存函数
18 0
|
19天前
|
缓存 安全 Java
Java并发编程进阶:深入理解Java内存模型
【4月更文挑战第6天】Java内存模型(JMM)是多线程编程的关键,定义了线程间共享变量读写的规则,确保数据一致性和可见性。主要包括原子性、可见性和有序性三大特性。Happens-Before原则规定操作顺序,内存屏障和锁则保障这些原则的实施。理解JMM和相关机制对于编写线程安全、高性能的Java并发程序至关重要。
|
26天前
|
编译器 C语言 C++
【C语言】calloc()函数详解(动态内存开辟函数)
【C语言】calloc()函数详解(动态内存开辟函数)
25 0
|
26天前
|
存储 前端开发 编译器
【C语言】memmove()函数(拷贝重叠内存块函数详解)
【C语言】memmove()函数(拷贝重叠内存块函数详解)
33 1
|
28天前
|
安全 程序员 C++
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
101 0

热门文章

最新文章