【发布时间】:2012-03-05 07:14:52
【问题描述】:
在我的程序中分配正确大小的内存时遇到问题。我执行以下操作:
void * ptr = sbrk(sizeof(void *)+sizeof(unsigned int));
当我这样做时,我认为它向堆中添加了太多内存,因为它以 void* 而不是字节为单位分配它。如何告诉它我希望 sizeof(whatever) 表示 whatever 字节而不是 whatever 其他单位?
编辑:
我见过其他人将事物转换为 char,以便编译器以字节为单位获取大小。如果 sizeof(unsigned int) 是 4 字节,但我使用的类型是 void *,编译器会破坏 void * 大小的 4 倍而不是 4 字节吗?
【问题讨论】:
-
您能解释一下为什么要在此处添加
sizeof(void*)吗?你打算用这个内存做什么?另外,你有什么理由不在这里使用plain-ol'malloc? -
简答:要么你知道你在做什么,你不需要问这个问题,要么你不知道你在做什么,你不应使用
sbrk(),而应使用malloc()。 -
我正在避免使用 malloc,因为我正在尝试一些系统调用(例如 sbrk()),并且我正在尝试在此内存块中存储任何类型的指针和无符号整数我添加到堆中
-
为了清楚起见,
sizeof运算符返回字节大小。我不明白你在问什么。您是否尝试过打印结果尺寸以检查它是否符合您的预期? -
我相信您知道自己在做什么,并意识到使用它代替 malloc 会降低程序的性能
标签: c memory-management sizeof sbrk