2 回答

TA貢獻1772條經驗 獲得超5個贊
寄存器和RAM存儲器是兩回事。編譯器通常會決定將哪些變量保留在哪里。在RAM的情況下,如果它每個變量使用32位,則地址仍然不同。當然,如果這提高了性能,它肯定可以使用64位并“浪費”32位。對于寄存器,編譯器將被允許對不同的變量使用低階和高階位,但幾乎肯定不會,因為這會降低性能。

TA貢獻1827條經驗 獲得超8個贊
如果我在具有 64 位內存位置的計算機上以 Go/C 格式聲明兩個 32 位整數,它們是否可以存儲在同一內存位置?
不,當然不是,因為那樣他們就不可能有不同的價值觀。
64 位架構仍然可以尋址內存中的每個字節。在 C 語言中,將 void 指針遞增 1 會使它指向下一個字節,而不是下一個 qword。與 32 位地址相比,您可以尋址更多的單個字節。
因此,[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中,這是一個實現細節,取決于編譯器,但是沒有一個健全的編譯器會通過將所有內容對齊在8個字節上來浪費大量內存。
- 2 回答
- 0 關注
- 91 瀏覽
添加回答
舉報