我正在构建一个使用unsigned short的数组的bigInt数据类型。在某些函数中,可以使用或不使用最高阶短,但总是分配以防万一。为了防止从基本数学运算中消耗无限的内存,我想重新分配数组:
toReturn.numArray = realloc(toReturn.numArray, (sizeof(unsigned short)) * (toReturn.numElements - 1))
但我不知道最高位是自由(理想)还是最低位。
答案 0 :(得分:3)
无法保证在缩小尺寸期间,相同的内存块将返回给您,并释放一些(缩小的)内存。你不应该依赖它,因为它根本不能保证。
C99标准7.20.3.4-1:重新分配功能:
realloc函数释放ptr指向的旧对象并返回一个 指向具有指定大小大小的新对象的指针。新内容 对象应与解除分配之前的旧对象相同,直到新旧尺寸中的较小者。新对象中超出旧对象大小的任何字节都具有不确定的值。
答案 1 :(得分:1)
如果重新定位内存块,数据将从旧缓冲区的底部复制到新大小。
如果您想保留数据的顶部,则必须执行malloc
/ memmove
或类似操作。
这与你的位有什么关系取决于你如何将数据映射到块中,我想。这应该是可以控制的。
答案 2 :(得分:1)
The realloc() function changes the size of the block pointed
to by ptr to size bytes and returns a pointer to the (possi-
bly moved) block. The contents will be unchanged up to the
lesser of the new and old sizes.
答案 3 :(得分:0)
好吧,我是个笨蛋。
array = realloc(array,smallerSizeNumber);
将数组[0]保存到数组[smallerSizeNumber - 1]。
高阶位丢失。