C 了解mmap大小参数
我很难理解mmap的大小参数(对不起,我的C生锈了)。例如(摘自另一个SO职位) 如果我们有: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
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位。