Golang内存分配测试

时间:2015-09-21 11:14:45

标签: memory go allocation

我正在尝试使用我的“程序”分配内存 - 只是为了分配它并留在那里 - 用于测试目的。当我在我的MacOS上运行它时,Activity Monitor显示它分配1.6 gb,当我为linux编译它并在那里运行它什么也没做 - 它打印消息但是ram没有在机器上使用。我做错了吗?有没有更好的办法?这是我的代码:

package main


import (
    "fmt"
    "unsafe"
    "time"
)


func main() {
    var buffer [100 * 1024 * 1024]string
    fmt.Printf("The size of the buffer is: %d bytes\n", unsafe.Sizeof(buffer))
    time.Sleep(300 * time.Second)
}

首先我使用byte作为我的数组类型,但它在我的mac上没有运行事件?

1 个答案:

答案 0 :(得分:4)

您的代码中没有任何需要内存的内容。编译器完全有权优化整个分配,即使编译器没有这样做,操作系统也不会提交内存 - 你永远不会分配任何东西,所以很可能只是镜像一个零页。

我对你正在使用的Linux和你正在使用的MacOS之间的微妙差异一无所知,所以几乎没有什么可以确定的。很可能你的linux机器上的内存检查方式只给你提交了内存,而你在MacOS上看到了所有的虚拟内存,或者可能还有其他微妙的差别。无论如何,由于编译器变得聪明,而且由于我们在PC上有虚拟内存,因此获得任何有意义的基准测试变得越来越困难 - 我们使用的工具通常足够智能以避免不必要的浪费;你会尝试的大多数基准测试都是完全不必要的浪费。

基准测试很难。