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

该程序应该读取由整数对(每行一对)组成的文件并删除重复的对。虽然它适用于小文件,但它会在大文件(比如 1.5 GB 的文件)上引发运行时错误。最初,我认为是地图数据结构导致了这种情况,但即使将其注释掉,它仍然内存不足。任何想法为什么会发生这种情况?如何纠正?这是一个内存不足的数据文件:http : //snap.stanford.edu/data/com-Orkut.html


package main

import (

    "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,117185083

1,2

1,3

1,4

1,5

1,6

1,7

1,8


拉丁的传说
浏览 213回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go