草庐IT

MALLOC_MMAP_THRESHOLD

全部标签

ios - 为什么 mmap() 使用 MAP_FAILED 而不是 NULL?

有人知道为什么mmap()返回MAP_FAILED而不是NULL吗?在大多数系统上,MAP_FAILED似乎是(void*)-1。为什么mmap()不直接使用NULL呢?我知道地址0x0在技术上是一个有效的内存页面,而(void*)-1永远不会是一个有效的页面。然而我的猜测是mmap()实际上永远不会返回页面0x0。例如,在Windows上,VirtualAlloc()在出错时返回NULL。假设mmap()永远不会返回0x0是否安全?据推测,对mmap()的成功调用应该将可用内存返回给调用者。地址0x0永远不可用,因此它永远不会在成功时返回。在这种情况下,使用0x0作为失败标记似乎是明

ios - 为什么 mmap() 使用 MAP_FAILED 而不是 NULL?

有人知道为什么mmap()返回MAP_FAILED而不是NULL吗?在大多数系统上,MAP_FAILED似乎是(void*)-1。为什么mmap()不直接使用NULL呢?我知道地址0x0在技术上是一个有效的内存页面,而(void*)-1永远不会是一个有效的页面。然而我的猜测是mmap()实际上永远不会返回页面0x0。例如,在Windows上,VirtualAlloc()在出错时返回NULL。假设mmap()永远不会返回0x0是否安全?据推测,对mmap()的成功调用应该将可用内存返回给调用者。地址0x0永远不可用,因此它永远不会在成功时返回。在这种情况下,使用0x0作为失败标记似乎是明

c - Linux 和 Windows 上的 malloc_size 替代方案

给定一个void*指针,如何知道在这个给定地址上分配的block的大小(以前使用malloc分配;在Linux和Windows中)?我希望这两个系统都能在某个地方存储此类信息。也就是说,OSX/Darwin上存在的malloc_size的替代方案。如果有帮助,请使用gcc/mingw。 最佳答案 在Windows上,使用MSCRT的东西可以使用_msize,在Linux上你可以尝试malloc_usable_size... 关于c-Linux和Windows上的malloc_size替代

c - Linux 和 Windows 上的 malloc_size 替代方案

给定一个void*指针,如何知道在这个给定地址上分配的block的大小(以前使用malloc分配;在Linux和Windows中)?我希望这两个系统都能在某个地方存储此类信息。也就是说,OSX/Darwin上存在的malloc_size的替代方案。如果有帮助,请使用gcc/mingw。 最佳答案 在Windows上,使用MSCRT的东西可以使用_msize,在Linux上你可以尝试malloc_usable_size... 关于c-Linux和Windows上的malloc_size替代

c - 当长度大于 4GB 时 mmap 失败

(正确的代码在“更新5”中)在此示例C代码中,我尝试映射从0x100000000到0x200000000的内存范围:#include#include#include#includeintmain(void){uint64_t*rr_addr=0;uint64_ti=17179869184;printf("\nsizeof(size_t):%llu\n",sizeof(size_t));printf("(uint64_t)0x100000000:%llx\n",(uint64_t)0x100000000);printf("1L在不同的系统(Linux、gcc)上,我得到不同的结果:结果1

c - 当长度大于 4GB 时 mmap 失败

(正确的代码在“更新5”中)在此示例C代码中,我尝试映射从0x100000000到0x200000000的内存范围:#include#include#include#includeintmain(void){uint64_t*rr_addr=0;uint64_ti=17179869184;printf("\nsizeof(size_t):%llu\n",sizeof(size_t));printf("(uint64_t)0x100000000:%llx\n",(uint64_t)0x100000000);printf("1L在不同的系统(Linux、gcc)上,我得到不同的结果:结果1

c - mmap函数中的MAP_SHARED和MAP_PRIVATE有什么区别?

为了好玩而使用mmap,我有以下代码:(..snip..)fd=open("/home/me/straight_a.txt",O_RDONLY);if(fd==-1){perror("open");exit(1);}m=mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_FILE|MAP_PRIVATE,fd,0);if(m==MAP_FAILED){perror("mmap");exit(1);}printf("mis%p\n",m);printf("*m=%c\n",*m);printf("*(m+1)=%c\n",*(m+1));(..snip..)这

c - mmap函数中的MAP_SHARED和MAP_PRIVATE有什么区别?

为了好玩而使用mmap,我有以下代码:(..snip..)fd=open("/home/me/straight_a.txt",O_RDONLY);if(fd==-1){perror("open");exit(1);}m=mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_FILE|MAP_PRIVATE,fd,0);if(m==MAP_FAILED){perror("mmap");exit(1);}printf("mis%p\n",m);printf("*m=%c\n",*m);printf("*(m+1)=%c\n",*(m+1));(..snip..)这

c - mmap 与/开发/零

假设我使用/dev/zero为mmap分配了一个大内存(40MB),如下所示。fd=open("/dev/zero",O_RDWR);a=mmap(0,4096e4,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FILE,fd,0);我的理解是,当页面被带入物理内存时,内核会将内存初始化为零(我想现代Linux内核使用Demandpaging)。因此,例如,当第一页被触及并因此被带入物理内存时,内核会将其所有4096字节初始化为零,然后当第二页被触及时,它会执行相同的操作,依此类推。我的理解正确吗? 最佳答案

c - mmap 与/开发/零

假设我使用/dev/zero为mmap分配了一个大内存(40MB),如下所示。fd=open("/dev/zero",O_RDWR);a=mmap(0,4096e4,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FILE,fd,0);我的理解是,当页面被带入物理内存时,内核会将内存初始化为零(我想现代Linux内核使用Demandpaging)。因此,例如,当第一页被触及并因此被带入物理内存时,内核会将其所有4096字节初始化为零,然后当第二页被触及时,它会执行相同的操作,依此类推。我的理解正确吗? 最佳答案