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


相关文章
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
36 3
|
4天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
26 6
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
229 1
|
2月前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
28 0
|
2月前
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
41 0
|
2月前
|
存储 C语言 C++
来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp
本文详细介绍了C语言中的四个内存操作函数:memcpy用于无重叠复制,memmove处理重叠内存,memset用于填充特定值,memcmp用于内存区域比较。通过实例展示了它们的用法和注意事项。
71 0
|
2月前
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
77 0
|
2月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
51 0