memory - 一个简单的 Go 程序的高内存使用率

标签 memory go

Codechef 中最简单的问题是只要数字不是 42 就从输入读取并写入输出。我写了以下代码:

package main

import "fmt"

func main() {
        var num int8
        fmt.Scanln(&num)
        for ; num != 42; fmt.Scanln(&num) {
                fmt.Println(num)
        }
}

它被接受,尽管根据站点使用 124.6M 内存。我用 C 写了基本相同的东西,却花了 1.6M,我很困惑。您知道是什么原因造成的吗?

我是 Go 的新手。这可能是一个大胆的错误。

最佳答案

我没有检查,但我怀疑您的程序使用 124+ MB 内存。我不知道你从哪里得到这个数字,但我猜你混淆了分配的虚拟内存和“已用内存”。这两个数字可能接近也可能不接近。

Go 通过 OS 保留了一个大的内存区域,但在 Go 运行时实际进一步分配之前,它不是“已用内存”。无人认领的虚拟内存在大多数系统上不占用实际内存,因此基本上是免费的。

关于memory - 一个简单的 Go 程序的高内存使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763172/

相关文章:

c++ - VirtualProtectEx 函数失败 - 错误 487,仅在 Windows XP 上

c++ - 为什么 std::auto_ptr operator = 垃圾对象?

memory - 如何将显存用作 RAM?

dictionary - 为什么 map 上的迭代是随机的?

go - 分配后是否可以进行转换?

google-app-engine - 查找方法以获取数据库中返回空数据集的记录

xml - 使用属性解码 xml 标签

c++ - 为什么 C++ 分配器避免就地重新分配

java - Android 将图库中的图像转换为 base64 导致 OutOfMemory 异常

go - 如何更改配置文件中的值未提供该值