2013-03-20 81 views
2

我正在構造一個bigInt數據類型,它使用一個unsigned short的數組。在某些功能中,可能使用也可能不使用最高訂單的空頭,但總是分配以防萬一。爲了防止基本的數學運算無盡的內存消耗,我想剛纔realloc的數組這樣的:當realloc縮小分配的塊時,內存在哪裏free'd?

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

,但我不知道,如果最高位位將被free'd(理想)或最低順序位。

+0

你真的擁有兆字節大小的整數嗎?否則,幾乎不需要收縮。 – kay 2013-03-20 15:38:57

+0

它旨在允許RSA暴力強制(學習它)和複雜文件操作在其他方面很難做到。但它不是兆字節,大約64艾字節... – Josh 2013-03-20 15:41:16

+0

@teppic這就是我要指望的...... – Josh 2013-03-20 15:41:43

回答

1

如果內存塊被重新定位,數據將從舊緩衝區的底部複製到新的大小。

如果您想保留數據的頂部,您必須執行malloc/memmove或類似的操作。

這與您的位相關如何取決於您如何將數據映射到塊中,我會想到的。這應該是可控的。

+0

定義舊緩衝區的底部?我不完全確定這是否依賴於endian。 – Josh 2013-03-20 15:42:26

+0

如何,如果,u16數組索引0是最低的順序,並且索引[大小]保存最高有效位。 – Josh 2013-03-20 15:43:16

+0

@Josh - '舊緩衝區的底部'='您通過'malloc'給出的內存地址,並且您傳入'realloc'' – 2013-03-20 16:22:03

3

無法保證在縮小規模期間,同一塊內存將返回給您,其中一些(縮小尺寸的)內存已釋放。你不應該依賴它,因爲它不能保證。

C99標準7.20.3.4-1:本realloc函數:

的realloc函數將釋放舊的對象通過ptr指向和 指針返回到具有尺寸SPECI音響編一個新的對象按尺寸。新對象的內容應與釋放前的舊對象的內容相同,最大爲新舊對象的最小值。新對象中超出舊對象大小的任何字節都有不確定的值。

+0

這不是我的問題。我不依賴於同一個內存塊,我想知道在新塊中可能會存在什麼,因爲新塊更小。 – Josh 2013-03-20 15:45:20

+0

@Josh:上面的引用是否也不回答?報價中有相當清楚明確的提及。他們全部。 – 2013-03-20 15:47:26

+0

目前尚不清楚。隱含的信息,丟失字節,不在此。不過,我想出了。我是愚蠢的。 – Josh 2013-03-20 15:51:29

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. 
+0

是的,但是保留了哪些字節? – Josh 2013-03-20 15:46:58

+0

「不變,直到較小..」,因此最左邊的字節被保留。即收縮(「123456789 \ 0」到4);將是「1234」,有或沒有尾隨零。整數和短褲相同 – 2013-03-20 15:49:57

+0

堅持....所以在一個數組中,索引0到?迷路了? – Josh 2013-03-20 15:53:34

0

好吧,我被一個啞巴,啞巴。

array = realloc(array,smallerSizeNumber);

保留數組[0]到數組[[sizeSizeNumber - 1])。

高位被丟失。

+0

*「新對象的內容應與釋放前的舊對象的內容相同,最大爲新舊對象的最小值。」*此引用不能回答您的問題? – 2013-03-20 16:11:50

相關問題