为了账号安全,请及时绑定邮箱和手机立即绑定

为什么以下 golang 程序会抛出运行时内存不足错误?

为什么以下 golang 程序会抛出运行时内存不足错误?

Go
拉丁的传说 2021-08-23 15:55:46
该程序应该读取由整数对(每行一对)组成的文件并删除重复的对。虽然它适用于小文件,但它会在大文件(比如 1.5 GB 的文件)上引发运行时错误。最初,我认为是地图数据结构导致了这种情况,但即使将其注释掉,它仍然内存不足。任何想法为什么会发生这种情况?如何纠正?这是一个内存不足的数据文件:http : //snap.stanford.edu/data/com-Orkut.htmlpackage mainimport (    "fmt"    "bufio"    "os"    "strings"    "strconv")func main() {    file, err := os.Open(os.Args[1])    if err != nil {        panic(err.Error())    }    defer file.Close()    type Edge struct {        u, v int    }    //seen := make(map[Edge]bool)    edges := []Edge{}    scanner := bufio.NewScanner(file)    for i, _ := strconv.Atoi(os.Args[2]); i > 0; i-- {        scanner.Scan()    }    for scanner.Scan() {        str := scanner.Text()        edge := strings.Split(str, ",")        u, _ := strconv.Atoi(edge[0])        v, _ := strconv.Atoi(edge[1])        var key Edge        if u < v {            key = Edge{u,v}        } else {            key = Edge{v,u}        }        //if seen[key] {        //  continue        //}        //seen[key] = true        edges = append(edges, key)    }    for _, e := range edges {        s := strconv.Itoa(e.u) + "," + strconv.Itoa(e.v)        fmt.Println(s)    }}下面给出了一个示例输入。该程序可以按如下方式运行(最后一个输入表示要跳过多少行)。去运行 undup.go a.txt 1# 3072441,1171850831,21,31,41,51,61,71,8
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信