0

我在我的程序中分配正确大小的内存时遇到问题。我执行以下操作:

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

当我这样做时,我认为它向堆中添加了太多内存,因为它以 void* 而不是字节为单位分配它。我如何告诉它我希望 sizeof( whatever ) 表示任何字节而不是任何其他单位?

编辑:

我见过其他人将事物转换为字符,以便编译器以字节为单位获取大小。如果 sizeof(unsigned int) 是 4 字节,但我使用的类型是 void *,编译器会破坏 void * 大小的 4 倍而不是 4 字节吗?

4

2 回答 2

0

传递多个字节作为 的参数sbrk

在Linux中,原型sbrk是:

void *sbrk(intptr_t increment);

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

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

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

于 2012-02-13T21:16:05.307 回答
0

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

于 2012-02-13T21:26:49.923 回答