草庐IT

buffer_memory

全部标签

memory - Go:重用映射键时大量使用内存

作为我的Go教程的一部分,我正在编写跨多个文件计算单词的简单程序。我有一些go例程用于处理文件和创建map[string]int以告知已找到特定单词的出现次数。然后将map发送到减少例程,该例程将值聚合到单个map。听起来很简单,看起来像是Go的完美(map-reduce)任务!我有大约10k个文档,其中包含160万个唯一单词。我发现我的内存使用量在运行代码时不断快速增长,并且我在大约一半的处理过程中内存不足(12GB盒,7GB空闲)。所以是的,它为这个小数据集使用了千兆字节!试图找出问题所在,我发现归咎于reducer收集和聚合数据。代码来了:funcreduceWords(inpu

memory-management - CGO:如何使用 malloc 从 go 中释放在 C 中分配的内存以避免内存泄漏

我正在尝试使用CGO从golang调用复杂算法的优化C++CPU绑定(bind)实现。基本上,它将一个字符串传递给C++函数并取回一个字符串。代码的简化版本如下所示:算法.gopackagemain//#cgoLDFLAGS://#include//#include//#include//char*echo(char*s);import"C"import"unsafe"funcmain(){cs:=C.CString("Hellofromstdio\n")deferC.free(unsafe.Pointer(cs))varechoOut*C.char=C.echo(cs)//defer

arrays - Golang 创建 bytes.Buffer 数组的多读取器

我需要创建slice的MultiReader[]*bytes.Bufferbuffer_slice:=...(type[]*bytes.Buffer)当我写io.MultiReader(buffer_slice)我得到错误:不能在io.MultiReader的参数中使用buffer_slice(类型[]*bytes.Buffer)作为io.Reader类型:[]*bytes.Buffer没有实现io.Reader(缺少Read方法)。但是函数签名MultiReader(readers...Reader)Reader我明白了,传输数组没有意义,实际问题:除了琐碎的循环,没有更多的选择吗?

go - 如何处理 bytes.Buffer 流中的 io.EOF?

https://play.golang.org/p/JKXKa7Pvjd我想弄清楚如何使用bytes.Buffer测试我的后台函数,其中流中可以有随机io.EOF?例子:packagemainimport("fmt""io""bytes""time")funcmain(){buffer:=new(bytes.Buffer)gobackground(buffer)i:=0fori我要找的结果是:1)teststring2)teststring3)teststring4)teststring5)teststring如何使用time.Sleep(1*time.Second)模拟延迟来实现这一

go - bytes.Buffer 的限制?

我正在尝试使用包“compress/gzip”压缩一段字节。我正在写入一个bytes.Buffer并且我正在写入45976字节,当我尝试使用gzip.reader解压缩内容然后使用阅读器函数时-我发现并非所有内容都已恢复。bytes.buffer有一些限制吗?这是一种绕过或改变它的方法吗?这是我的代码(编辑):funccompress_and_uncompress(){varbufbytes.Bufferw:=gzip.NewWriter(&buf)i,err:=w.Write([]byte(long_string))if(err!=nil){log.Fatal(err)}w.Clos

memory - 声明非常大的数组并迭代 stdin 时内存持续增加

以下代码声明了两个数组,然后遍历stdin(只是盲目地遍历文件-不与数组交互)。这导致内存不断增加。但是,如果我只声明两个数组并休眠-内存不会增加。同样,如果我只是迭代stdin-内存不会增加。但加起来(除了分配给数组的内存)还有一个持续的增长。我通过使用top工具查看RES内存来测量这一点。我把funcdoSomething()中的前几行注释掉了,说明注释的时候没有内存增加。取消注释行并运行将导致增加。NOTE:Thiswasrunongo1.4.2,1.5.3and1.6NOTE:Youwillneedtorecreatethisonamachinewithatleast16GBR

go - Protocol Buffer 使用枚举

你好,我正在使用protobuf,但我遇到了问题。我有一些枚举函数,但其​​中我有相同的别名,当我尝试为某种语言“go”编译文件时,编译器返回错误。我复制了protobuf文档中的示例来定义枚举,但仍然无法正常工作。enumEnumAllowingAlias{optionallow_alias=true;UNKNOWN=0;STARTED=1;RUNNING=1;}enumEnumNotAllowingAlias{UNKNOWN=0;STARTED=1;//RUNNING=1;//UncommentingthislinewillcauseacompileerrorinsideGoogl

golang : difference between var b Buffer and bytes. 缓冲区{}

varbbytes.Buffer//ABufferneedsnoinitialization.b:=bytes.Buffer{}这两个有什么区别?我在这里试过:http://play.golang.org/p/lnkkULeIYm没看出区别。谢谢, 最佳答案 :=是var的简写语法,在这种情况下b是一个零值bytes.Buffer。varbbytes.Buffer//isthesameasvarb=bytes.Buffer{}//isthesameasb:=bytes.Buffer{}您不能在函数外使用简写版本,因此对于全局变量,您

python - 外部函数 : who deallocates memory?

我正在从Python调用Go函数。Go函数返回一个字符串,具体来说,是一个GoString,字符串本身是在Go端分配的。问题谁负责释放此内存?下面是一个非常简化的示例。走一边:funcCreate(optsEncodedstring)(resstring,serrstring){opts:=map[string]interface{}{}iferr:=json.Unmarshal([]byte(optsEncoded),&opts);err!=nil{return"",errWithStack(err)}options:=translateCreateOptions(opts)resu

go 函数 - panic : runtime error: invalid memory address or nil pointer dereference

在此先感谢大家的帮助。我已经在问题发生的第41、42和58行做了标记。我无法追踪引发错误的原因。似乎所有变量都已正确分配。我使用命令:gorunfile.go'command''ipaddress'ex.-gorunfile.gouptime8.8.8.8错误是:panic:runtimeerror:invalidmemoryaddressornilpointerdereference[signalSIGSEGV:segmentationviolationcode=0x1addr=0x0pc=0x54fb36]goroutine20[running]:golang.org/x/cryp