C:在malloc()中使用getpagesize()

时间:2014-02-07 09:35:33

标签: c memory-management malloc

getpagesize()手册页中,写了“函数getpagesize()返回内存页面中的字节数,其中”page“是一个固定长度的块,用于内存分配的单位”

是否意味着如果我们malloc(10),malloc()会分配10 * getpagesize()

此外,如果我执行malloc(1)的简单程序,33 * getpagesize()的断点移动:

printf("sbrk(0) : %p\n", sbrk(0));
char  *str1 = malloc(1);
printf("sbrk(0) : %p\n", sbrk(0));

显示:

sbrk(0) : 0x1248000
sbrk(0) : 0x1269000
pagesize : 4096

这是否意味着malloc只在内存中分配一个预防性的大位置?

6 个答案:

答案 0 :(得分:1)

不,malloc的分配单位是字节。页面大小用于需要页面对齐内存或处理页面单位的内存函数。 mmap是一个这样的记忆功能,对其某些用途有“页面”要求。

答案 1 :(得分:1)

操作系统以页面形式提供进程内存。

malloc根据需要对页面进行分割,以便为您提供较小的分配。

答案 2 :(得分:1)

页面是操作系统为进程分配内存时使用的最小单位。

在C中,最小单位的大小为1 char(至少包含8位)。

malloc的单位为sizeof(char),通常称为1个字节。

所以malloc(10)分配10个字节,而不是10个页面。

答案 3 :(得分:0)

在现代操作系统中,如windows或linux,......

内存管理器使用页面单元来分配处理或数据块的字节块或....

但在malloc中它只是你的字节

和pagesize只用于os内存管理

您也可以阅读此页面了解更多详情

http://www.cplusplus.com/reference/cstdlib/malloc/

答案 4 :(得分:0)

不,malloc(10)仅分配10个字节。

函数getpagesize()返回系统内存页面的大小,在大多数情况下为4096.

答案 5 :(得分:0)

除非页面大小为1字节,否则答案是否定的。

malloc(10)分配10个字节的内存,一个页面更可能比这个更多。 阅读http://en.wikipedia.org/wiki/Page_%28computer_memory%29以获得有关页面实际内容的更准确描述。

但是对于一个简短的回答,答案很可能是否定的。 祝你好运!