假设我有下面这行代码:

int PAGESIZE = getpagesize(); // returns 4096
int* shared_mm = mmap(NULL,PAGESIZE,PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANONYMOUS,-1,0);

这意味着我得到了4096个字节,所以我可以存储1024个整数(4096/4),对吗?

因此,如果我需要保存类型为int的N个值,我将不得不这样做:

PAGESIZE = N * 4;

并将其传递给mmap函数,知道如果不是,它会将其舍入到4096的倍数,我说的对吗?

推荐答案

int可以是也可以不是4个字节.这是一个常见的大小,但它只能保证至少为2个字节[1].

所以正确的表达应该是

PAGESIZE = N * sizeof( int );

就像使用malloc的时候一样.传递给mmap的长度不需要是页面大小的倍数.


  1. 假设为8位字节,但现在已成定局.

C++相关问答推荐

海湾合作委员会是否保证大小匹配的访问?

为什么PLT表中没有push指令?

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

通过MQTT/蚊子发送大文件—限制在4MB

标准的C17标准是用括号将参数包装在函数声明中吗

为什么复合文字(C99)的返回会生成更多的汇编代码?

堆栈在作用域阻塞后会被释放吗?

如何将字符串argv[]赋给C中的整型数组?

在C中将通用字符名称转换为UTF-8

在传统操作系统上可以在虚拟0x0写入吗?

用C宏替换strncMP函数中的参数

使用双指针动态分配和初始化2D数组

当输入负数时,排序算法存在问题

N的值设置为0或1(未定义的行为),而我正在try 学习realloc和Malloc的用法

如何编写一个for循环来计算C中各项的总和?

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

pthread_create的用法

将 struct 数组写入二进制文件时发生Valgrind错误

通过对一个大的Malloc内存进行切片来使用Malloc的内存片

程序如何解释变量中的值