首页 文章

分配适当的内存大小

提问于
浏览
0

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

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

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

编辑:

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

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 . brksbrk 是系统调用,通常在内部用于实现 malloc 用户函数 .

  • 0

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

相关问题