相关疑难解决方法(0)

程序退出时是否释放泄漏的内存?

如果我编程 - 不知道它 - 内存泄漏,并且应用程序终止,泄漏的内存是否被释放?

c++ memory-leaks

100
推荐指数
6
解决办法
3万
查看次数

说明:不要通过共享内存进行通信; 通过沟通分享记忆

我想知道这个着名的引言最真实的解释是什么:

不要通过共享内存进行通信; 通过沟通分享记忆.(R. Pike)

Go Go Memory Model中,我可以读到:

通道上的发送在该通道的相应接收完成之前发生.(Golang Spec)

还有一篇专门的golang文章解释了这句话.而关键的贡献也是Andrew G.的一个实例.

好.有时太多谈论....我从Memory Spec报价中得出,并且通过查看工作示例:

在goroutine1通过通道向goroutine2发送(任何内容)后,goroutine1完成的所有更改(内存中的任何位置)必须在通过相同通道接收到goroutine2后才可见.(Golang Lemma by Me :)

因此,我得出了着名引言的脚踏实地的解释:

要同步两个goroutine之间的内存访问,您不需要通过通道发送该内存.足够好的是从频道接收(甚至没有).您将看到goroutine发送(到频道)时发送的任何更改(在任何地方).(当然,假设没有其他goroutine写入相同的内存.)更新(2)8-26-2017

我实际上有两个问题:

1)我的结论是否正确?

2)我的解释有帮助吗?

更新(1) 我假设没有缓冲的频道.让我们首先限制自己,避免用太多的未知数来改造自己.

请注意,我们还要关注两个goroutine的简单用法,这两个goroutines通过单个通道和相关的记忆效应进行通信而不是最佳实践 - 这超出了本问题的范围.

为了更好地理解我的问题的范围,假设goroutine可以访问任何类型的内存结构 - 不仅是原始的 - 并且它可以是一个大的,它可以是字符串,映射,数组,等等.

memory channel go goroutine

19
推荐指数
5
解决办法
5245
查看次数

标签 统计

c++ ×1

channel ×1

go ×1

goroutine ×1

memory ×1

memory-leaks ×1