我正在构建一个使用无符号短数组的 bigInt 数据类型。在某些函数中,可能会使用也可能不会使用最高阶的 short,但总是分配以防万一。为了防止基本数学运算造成无休止的内存消耗,我只想重新分配数组:
toReturn.numArray = realloc(toReturn.numArray, (sizeof(unsigned short)) * (toReturn.numElements - 1))
但我不知道最高位是否会被释放(理想)或最低位。
无法保证在缩小规模期间将释放一些(缩小的)内存返回给您。您不应该依赖它,因为它根本无法保证。
C99 标准 7.20.3.4-1:realloc 函数:
realloc 函数释放 ptr 指向的旧对象,并返回一个指向新对象的指针,该对象的大小由 size 指定。新对象的内容应与释放前旧对象的内容相同,直至新旧大小中的较小者。新对象中超出旧对象大小的任何字节都具有不确定的值。
如果内存块被重定位,数据将从旧缓冲区的底部复制到新的大小。
如果你想保留你的数据的顶部,你将不得不做一个malloc
/memmove
或类似的事情。
这与您的位的关系取决于您如何将数据映射到块中,我会想到。这应该是可控的。
来自“人 realloc()”
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.
好吧,我是个哑巴。
数组 = realloc(数组,smallerSizeNumber);
将数组 [0] 保留到数组 [smallerSizeNumber - 1]。
高位丢失。