Solidity

動態數組記憶體重新分配是如何工作的?

  • July 13, 2018

假設我有一個一定長度的動態數組,我想推送一個新元素,但是最後一個元素之後的記憶體已經被使用。 在此處輸入圖像描述

在這種情況下會發生什麼?編譯器會找到一個新的記憶體“塊”,它可以保存一個數組並將其複製到那里或其他什麼地方?如果是,如何計算這個新地址?

另外,據我所知,solidity 中的動態數組在某種程度上類似於映射,我的意思是數組的每個項目都是從使用數組變數地址的雜湊計算的地址按順序排列的:

keccak256(bytes32(variable_address))

如果記憶體被重新分配,solidity 將如何找到這個變數的新位置?我們不儲存任何指針,只是計算雜湊。

在此處輸入圖像描述

Solidity 從不重新分配儲存陣列(甚至無法調整記憶體陣列的大小)。Solidity 依賴於這樣一個事實,即所有儲存陣列位置都基於 KECCAK256 雜湊,並且 KECCAK256 被認為是抗衝突的,因此兩個儲存陣列發生衝突的機率非常小。

引用自:https://ethereum.stackexchange.com/questions/28404