2 回答
TA貢獻1772條經(jīng)驗 獲得超5個贊
寄存器和RAM存儲器是兩回事。編譯器通常會決定將哪些變量保留在哪里。在RAM的情況下,如果它每個變量使用32位,則地址仍然不同。當(dāng)然,如果這提高了性能,它肯定可以使用64位并“浪費”32位。對于寄存器,編譯器將被允許對不同的變量使用低階和高階位,但幾乎肯定不會,因為這會降低性能。
TA貢獻1827條經(jīng)驗 獲得超8個贊
如果我在具有 64 位內(nèi)存位置的計算機上以 Go/C 格式聲明兩個 32 位整數(shù),它們是否可以存儲在同一內(nèi)存位置?
不,當(dāng)然不是,因為那樣他們就不可能有不同的價值觀。
64 位架構(gòu)仍然可以尋址內(nèi)存中的每個字節(jié)。在 C 語言中,將 void 指針遞增 1 會使它指向下一個字節(jié),而不是下一個 qword。與 32 位地址相比,您可以尋址更多的單個字節(jié)。
因此,[1000]int32是[1000]int64的一半:
package main
import (
"fmt"
"unsafe"
)
func main() {
var x [1000]int32
var y [1000]int64
fmt.Println(unsafe.Sizeof(x)) // 4000
fmt.Println(unsafe.Sizeof(y)) // 8000
}
請注意,在Go中,這是一個實現(xiàn)細節(jié),取決于編譯器,但是沒有一個健全的編譯器會通過將所有內(nèi)容對齊在8個字節(jié)上來浪費大量內(nèi)存。
- 2 回答
- 0 關(guān)注
- 110 瀏覽
添加回答
舉報
