memory - Golang内存分配测试

标签 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 上不起作用?

最佳答案

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

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

基准测试很难。

关于memory - Golang内存分配测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693799/

相关文章:

mongodb - 我可以使用 golang (mgo) 在一个查询中聚合两个 mongodb 查询吗?

c++ - arduino 上发生了奇怪的事情

iphone - NSAutoreleasePool 和类变量

java - java进程中的实际线程数是多少?

c - 堆内存 : Gap of 16 bytes for 8 byte struct

java - return 语句之前的局部变量,这有关系吗?

arrays - slice append 的行为异常

当找不到值时,Gorm 返回空对象而不是默认对象

c++ - 具有持久查找的线性内存容器?

c++ - 东西像新的但是要分配2个房间