我遇到了在程序中分配正确大小的内存的问题。我做了以下事情:
void * ptr = sbrk(sizeof(void *)+sizeof(unsigned int));
当我这样做时,我认为它为堆添加了太多内存,因为它以void *而不是bytes为单位进行分配。我如何告诉它我想要sizeof(无论)来表示无论字节而不是其他其他单位?
编辑:
我已经看到其他人将事物转换为char,以便编译器获取字节大小。如果sizeof(unsigned int)是4个字节,但我使用的类型是void *,那么编译器是否会破坏void *而不是4个字节的4倍?
答案 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
函数,而不是sbrk
。 brk
和sbrk
是系统调用,通常在内部用于实现malloc
用户功能。
答案 1 :(得分:0)
内核以页面粒度管理进程内存。这意味着进程地址空间必须增加(或缩小)整数页
因此,即使sbrk
获得了多个字节,它也会为进程添加至少一个页面。