C 了解mmap大小参数

C 了解mmap大小参数,c,c99,mmap,C,C99,Mmap,我很难理解mmap的大小参数(对不起,我的C生锈了)。例如(摘自另一个SO职位) 如果我们有: typedef struct container { int counter; } container; container *memory; memory = mmap(NULL, 500*sizeof(container), PROT_READ|PROT_WRITE, MAP_SHARED, -1, 0); container *entry = (container *) malloc

我很难理解mmap的大小参数(对不起,我的C生锈了)。例如(摘自另一个SO职位)

如果我们有:

typedef struct container {
    int counter;
} container;

container *memory;
memory = mmap(NULL, 500*sizeof(container), PROT_READ|PROT_WRITE, MAP_SHARED, -1, 0);

container *entry = (container *) malloc(sizeof(container));
entry->counter = 1;
// Just arbitrarily
memory[1] = *entry;
内存[1]难道不是指向容器的指针,因此不是容器的大小吗?或者有没有使用mmap的方法可以确保只插入500个容器条目?还是应该按sizeof(容器)的步骤访问内存


谢谢

首先,当您使用
mmap
获取内存时,您的问题中没有任何特定于
mmap
。如果你只是在做以下事情,同样的结论也适用:

container *memory = malloc(500*sizeof(container));

在这两种情况下,您都有一个长度为
500*sizeof(container)
字节的内存块,返回的指针可以被视为指向500个
container
结构数组的第一个元素。

内存是指向容器的指针,因此内存[1]是容器。它与*(内存+1)相同。但是如果我使用内存[0]=*项,那是指向一个项的指针,所以它只是一个32位指针,对吗?我应该将该条目存储到内存中吗?@Rio:No-
memory
是一个指针,但是
memory[0]
是一个
struct
。与
*entry
-相同,因此您在这里将一个结构分配给另一个结构,这很好。指针的大小是特定于实现的,不一定是32位。