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


相关文章
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
151 3
|
6月前
|
存储 缓存 Java
【高薪程序员必看】万字长文拆解Java并发编程!(5):深入理解JMM:Java内存模型的三大特性与volatile底层原理
JMM,Java Memory Model,Java内存模型,定义了主内存,工作内存,确保Java在不同平台上的正确运行主内存Main Memory:所有线程共享的内存区域,所有的变量都存储在主存中工作内存Working Memory:每个线程拥有自己的工作内存,用于保存变量的副本.线程执行过程中先将主内存中的变量读到工作内存中,对变量进行操作之后再将变量写入主内存,jvm概念说明主内存所有线程共享的内存区域,存储原始变量(堆内存中的对象实例和静态变量)工作内存。
232 0
|
4月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
315 15
|
11月前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
407 6
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
308 6
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
218 0
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
168 0
|
存储 C语言 C++
来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp
本文详细介绍了C语言中的四个内存操作函数:memcpy用于无重叠复制,memmove处理重叠内存,memset用于填充特定值,memcmp用于内存区域比较。通过实例展示了它们的用法和注意事项。
280 0

热门文章

最新文章