第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Golang中int8、int16、int32分別分配了多少內(nèi)存?

Golang中int8、int16、int32分別分配了多少內(nèi)存?

Go
守著星空守著你 2023-05-15 14:50:46
我有一段簡單的代碼,我在其中為int8、int16和類型分配內(nèi)存并打印出變量的地址:int32int64package mainimport ("fmt""runtime")func main() {    fmt.Println(runtime.Compiler, runtime.GOARCH, runtime.GOOS)    var i8 *int8    var i16 *int16    var i32 *int32    var i64 *int64    fmt.Println(&i8)    fmt.Println(&i16)    fmt.Println(&i32)    fmt.Println(&i64)}這是我收到的輸出:gc amd64 darwin0xc00008a0200xc00008a0280xc00008a0300xc00008a038從這里我可以得出結(jié)論,只有int16使用 4 個字節(jié),其他類型使用 8 個字節(jié)。我的推理和檢查分配的內(nèi)存大小的方法是否正確?如果是,在 64 位架構(gòu)系統(tǒng)上使用int8,有什么優(yōu)勢?int32
查看完整描述

1 回答

?
30秒到達(dá)戰(zhàn)場

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個贊

您分配的指針在您的示例中都是 8 個字節(jié):gc amd64 darwin.


對于你的例子,


package main


import (

    "fmt"

    "runtime"

    "unsafe"

)


func main() {


    fmt.Println(runtime.Compiler, runtime.GOARCH, runtime.GOOS)


    var i8 *int8

    var i16 *int16

    var i32 *int32

    var i64 *int64


    fmt.Println(&i8, unsafe.Sizeof(i8), unsafe.Sizeof(*i8))

    fmt.Println(&i16, unsafe.Sizeof(i16), unsafe.Sizeof(*i16))

    fmt.Println(&i32, unsafe.Sizeof(i32), unsafe.Sizeof(*i32))

    fmt.Println(&i64, unsafe.Sizeof(i64), unsafe.Sizeof(*i64))


}

輸出:


gc amd64 linux

0xc00000e030 8 1

0xc00000e038 8 2

0xc00000e040 8 4

0xc00000e048 8 8

對于 CPU 操作,使用 CPU 的自然字長通常是最有效的,例如,int或int64on amd64。


對于內(nèi)存大小,對于大量整數(shù),使用可以容納值范圍的最小整數(shù)大小可能是最有效的。


這是一種平衡行為。對來自真實(shí)應(yīng)用程序的真實(shí)代碼進(jìn)行基準(zhǔn)測試。


查看完整回答
反對 回復(fù) 2023-05-15
  • 1 回答
  • 0 關(guān)注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號