多个整数是否存储在同一内存位置以节省空间?

如果我在具有 64 位内存位置的计算机上以 Go/C 声明两个 32 位整数。它们可以存储在同一内存位置吗?最左边的 32 位存储第一个整数,右边最右边的 32 位存储第二个整数。或者,您声明的每个变量都存储在其自己的内存位置。

换句话说:使用与 ? 相同的内存位置量1000 x int321000 x int64


至尊宝的传说
浏览 65回答 2
2回答

月关宝盒

寄存器和RAM存储器是两回事。编译器通常会决定将哪些变量保留在哪里。在RAM的情况下,如果它每个变量使用32位,则地址仍然不同。当然,如果这提高了性能,它肯定可以使用64位并“浪费”32位。对于寄存器,编译器将被允许对不同的变量使用低阶和高阶位,但几乎肯定不会,因为这会降低性能。

慕仙森

如果我在具有 64 位内存位置的计算机上以 Go/C 格式声明两个 32 位整数,它们是否可以存储在同一内存位置?不,当然不是,因为那样他们就不可能有不同的价值观。64 位架构仍然可以寻址内存中的每个字节。在 C 语言中,将 void 指针递增 1 会使它指向下一个字节,而不是下一个 qword。与 32 位地址相比,您可以寻址更多的单个字节。因此,[1000]int32是[1000]int64的一半:package mainimport (    "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个字节上来浪费大量内存。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go