关于C#:分配适当的内存大小

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个字节吗?


内核以页面粒度管理进程内存。 这意味着进程地址空间必须按页面总数增长(或缩小)。
因此,即使sbrk获得了一定数量的字节,它也将向进程添加至少一页。


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

在Linux中,sbrk的原型为:

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.

但是,正如某些人在注释中所添加的那样,如果要动态分配内存,则需要的是malloc函数而不是sbrkbrksbrk是通常在内部用于实现malloc用户功能的系统调用。