如果我在具有 64 位内存位置的计算机上以 Go/C 声明两个 32 位整数。它们可以存储在同一内存位置吗?最左边的 32 位存储第一个整数,右边最右边的 32 位存储第二个整数。或者,您声明的每个变量都存储在其自己的内存位置。换句话说:使用与 ? 相同的内存位置量1000 x int321000 x int64
2 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
寄存器和RAM存储器是两回事。编译器通常会决定将哪些变量保留在哪里。在RAM的情况下,如果它每个变量使用32位,则地址仍然不同。当然,如果这提高了性能,它肯定可以使用64位并“浪费”32位。对于寄存器,编译器将被允许对不同的变量使用低阶和高阶位,但几乎肯定不会,因为这会降低性能。
慕仙森
TA贡献1827条经验 获得超7个赞
如果我在具有 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 关注
- 64 浏览
添加回答
举报
0/150
提交
取消