Allocating proper memory size
我在程序中分配合适的内存大小时遇到问题。 我执行以下操作:
1 | void * ptr = sbrk(sizeof(void *)+sizeof(unsigned int)); |
当我这样做时,我认为它为堆添加了过多的内存,因为它以void *而不是字节为单位分配内存。 我如何告诉我我想要sizeof(whatever)表示什么字节而不是其他任何单位?
编辑:
我已经看到其他人将事物转换为char,以便编译器采用字节大小。 如果sizeof(unsigned int)是4个字节,但是我使用的类型是void *,那么编译器会破坏void *大小的4倍而不是4个字节吗?
内核以页面粒度管理进程内存。 这意味着进程地址空间必须按页面总数增长(或缩小)。
因此,即使
传递多个字节作为
在Linux中,
1 | void *sbrk(intptr_t increment); |
http://www.kernel.org/doc/man-pages/online/pages/man2/brk.2.html
sbrk() increments the program's data space by increment bytes.
但是,正如某些人在注释中所添加的那样,如果要动态分配内存,则需要的是