Memory Golang内存分配测试

Memory Golang内存分配测试,memory,go,allocation,Memory,Go,Allocation,我正试图用我的“程序”分配内存——只是为了分配内存并保持在那里——以用于测试目的。当我在MacOS上运行它时,活动监视器显示它分配了1.6 gb,当我为linux编译它并在那里运行它时,它什么也不做——它打印消息,但计算机上没有使用ram。我做错了吗?有更好的办法吗?这是我的密码: package main import ( "fmt" "unsafe" "time" ) func main() { var buffer [100 * 1024 * 102

我正试图用我的“程序”分配内存——只是为了分配内存并保持在那里——以用于测试目的。当我在MacOS上运行它时,活动监视器显示它分配了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)
}

首先,我使用字节作为数组类型,但它在我的mac上不起作用

代码中没有任何东西需要内存。编译器完全有权优化整个分配,即使编译器不这样做,操作系统也不会提交内存—您从未分配任何内容,因此它很可能只是镜像了一个零页

我不知道你正在使用的Linux和MacOS之间有什么细微的区别,所以没有什么可以肯定的。很可能是,当您在MacOS上看到所有虚拟内存时,您在linux机器上检查内存的方式只提供了提交内存,或者可能存在其他细微的差异。无论如何,自从编译器变得智能化,自从我们在PC上拥有虚拟内存以来,获得任何有意义的基准测试变得越来越困难——我们使用的工具通常足够智能,可以避免不必要的浪费;而您将尝试的大多数基准测试几乎都是完全不必要的浪费


基准测试很难。

代码中没有任何东西需要内存。编译器完全有权优化整个分配,即使编译器不这样做,操作系统也不会提交内存—您从未分配任何内容,因此它很可能只是镜像了一个零页

我不知道你正在使用的Linux和MacOS之间有什么细微的区别,所以没有什么可以肯定的。很可能是,当您在MacOS上看到所有虚拟内存时,您在linux机器上检查内存的方式只提供了提交内存,或者可能存在其他细微的差异。无论如何,自从编译器变得智能化,自从我们在PC上拥有虚拟内存以来,获得任何有意义的基准测试变得越来越困难——我们使用的工具通常足够智能,可以避免不必要的浪费;而您将尝试的大多数基准测试几乎都是完全不必要的浪费


基准测试很难。

25年前,测量“使用了多少内存”是一项简单的任务。它不再简单,因为存在大量不同类型的“内存”。“使用过”是一个非常模糊的记忆术语。使用
go test-benchmem
提供的工具来查看代码的“分配重”。25年前,测量“使用了多少内存”是一项简单的任务。它不再简单,因为存在大量不同类型的“内存”。“使用过”是一个非常模糊的记忆术语。使用
go test-benchmem
提供的工具来查看代码的“分配重”。这个指标更可靠,也更重要。谢谢,我只是随便玩玩,想看看会发生什么。这句话是:“你的代码中没有任何东西需要内存。编译器完全有权优化整个分配,即使编译器没有这样做”帮助:)-我为e添加了
,:=range buffer{buffer[e]=“string”}
现在,当我在linux机器上运行它时,mem使用的内存将达到1.6 Gig。谢谢,我只是在玩,想看看会发生什么。这句话是:“你的代码中没有任何东西需要内存。编译器完全有权优化整个分配,即使编译器没有这样做”帮助:)-我为e添加了
,:=range buffer{buffer[e]=“string”}
现在,当我在linux机器上运行它时,所使用的内存将达到1.6 Gig。