【发布时间】:2013-03-25 07:11:04
【问题描述】:
这可能是一个非常基本的问题,但我不太确定Casting an int pointer to a char ptr and vice versa 的答案是否适用于我的情况。 所以基本上我有以下几点:
void* head = sbrk(1024); //allocate 1024 bytes in heap
*((int*)(head+size)) = value; //value and size are int with valoues between 1 and 1023
我想知道上面的任意大小值是否不起作用,那么大小值的限制是什么?它必须能被 4 整除吗?
【问题讨论】:
-
我很震惊这甚至编译。指针算法需要一个typed 指针来确定调整地址时的大小差异。 GNU 有一个扩展允许它,所以我相信其他人也这样做,但我仍然被它收回。即使扩展允许它编译,如果大小 not 是
sizeof(int)的倍数,您也可能会在非 x86 平台上遇到对齐错误。我不能直接代表 GNU 扩展,但它很可能通过将指针视为char*来执行void*算术。 -
混用 sbrk() 分配内存已被弃用很长时间,有利于 malloc() 和朋友。你为什么使用 sbrk?