亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多個整數是否存儲在同一內存位置以節省空間?

多個整數是否存儲在同一內存位置以節省空間?

Go
至尊寶的傳說 2022-08-24 16:56:45
如果我在具有 64 位內存位置的計算機上以 Go/C 聲明兩個 32 位整數。它們可以存儲在同一內存位置嗎?最左邊的 32 位存儲第一個整數,右邊最右邊的 32 位存儲第二個整數?;蛘?,您聲明的每個變量都存儲在其自己的內存位置。換句話說:使用與 ? 相同的內存位置量1000 x int321000 x int64
查看完整描述

2 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

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


查看完整回答
反對 回復 2022-08-24
?
慕仙森

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個字節上來浪費大量內存。


查看完整回答
反對 回復 2022-08-24
  • 2 回答
  • 0 關注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號