我在程序中分配正确大小的内存时遇到问题 . 我做以下事情:
void * ptr = sbrk(sizeof(void *)+sizeof(unsigned int));
当我这样做时,我认为它为堆添加了太多内存,因为它以void *而不是bytes为单位进行分配 . 我如何告诉它我想要sizeof(无论如何)意味着什么字节而不是其他任何单位?
编辑:
我已经看到其他人将事物转换为char,以便编译器获取字节大小 . 如果sizeof(unsigned int)是4个字节,但我使用的类型是void *,那么编译器是否会破坏void *的4倍而不是4个字节的大小?
2 回答
传递一些字节作为
sbrk
的参数 .在Linux中,
sbrk
的原型是:http://www.kernel.org/doc/man-pages/online/pages/man2/brk.2.html
但正如评论中的一些人所说,如果你想动态分配内存,你正在寻找
malloc
函数,而不是sbrk
.brk
和sbrk
是系统调用,通常在内部用于实现malloc
用户函数 .内核以页面粒度管理进程内存 . 这意味着进程地址空间必须增加(或缩小)整数页 .
因此,即使
sbrk
获得了多个字节,它也会向进程添加至少一个页面 .