分配适当的内存大小

时间:2012-02-13 21:11:52

标签: c memory-management sizeof sbrk

我遇到了在程序中分配正确大小的内存的问题。我做了以下事情:

void * ptr = sbrk(sizeof(void *)+sizeof(unsigned int));

当我这样做时,我认为它为堆添加了太多内存,因为它以void *而不是bytes为单位进行分配。我如何告诉它我想要sizeof(无论)来表示无论字节而不是其他其他单位?

编辑:

我已经看到其他人将事物转换为char,以便编译器获取字节大小。如果sizeof(unsigned int)是4个字节,但我使用的类型是void *,那么编译器是否会破坏void *而不是4个字节的4倍?

2 个答案:

答案 0 :(得分:0)

传递一些字节作为sbrk的参数。

在Linux中,sbrk的原型是:

void *sbrk(intptr_t increment);

http://www.kernel.org/doc/man-pages/online/pages/man2/brk.2.html

  

sbrk()按递增字节递增程序的数据空间。

但正如评论中的一些人所说,如果你想动态分配内存,那么你正在寻找malloc函数,而不是sbrkbrksbrk是系统调用,通常在内部用于实现malloc用户功能。

答案 1 :(得分:0)

内核以页面粒度管理进程内存。这意味着进程地址空间必须增加(或缩小)整数页 因此,即使sbrk获得了多个字节,它也会为进程添加至少一个页面。