2

我正在构建一个使用无符号短数组的 bigInt 数据类型。在某些函数中,可能会使用也可能不会使用最高阶的 short,但总是分配以防万一。为了防止基本数学运算造成无休止的内存消耗,我只想重新分配数组:

toReturn.numArray = realloc(toReturn.numArray, (sizeof(unsigned short)) * (toReturn.numElements - 1))

但我不知道最高位是否会被释放(理想)或最低位。

4

4 回答 4

3

无法保证在缩小规模期间将释放一些(缩小的)内存返回给您。您不应该依赖它,因为它根本无法保证。

C99 标准 7.20.3.4-1:realloc 函数:

realloc 函数释放 ptr 指向的旧对象,并返回一个指向新对象的指针,该对象的大小由 size 指定。新对象的内容应与释放前旧对象的内容相同,直至新旧大小中的较小者。新对象中超出旧对象大小的任何字节都具有不确定的值。

于 2013-03-20T15:41:35.337 回答
1

如果内存块被重定位,数据将从旧缓冲区的底部复制到新的大小。

如果你想保留你的数据的顶部,你将不得不做一个malloc/memmove或类似的事情。

这与您的位的关系取决于您如何将数据映射到块中,我会想到。这应该是可控的。

于 2013-03-20T15:38:28.537 回答
1

来自“人 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.
于 2013-03-20T15:46:09.613 回答
0

好吧,我是个哑巴。

数组 = realloc(数组,smallerSizeNumber);

将数组 [0] 保留到数组 [smallerSizeNumber - 1]。

高位丢失。

于 2013-03-20T15:48:37.160 回答