Memory Go(lang)中的地址空间是多少?
我试图理解Go中并发编程的基础知识。几乎所有文章都使用术语“地址空间”,例如:“所有goroutine共享相同的地址空间”。这是什么意思 我试图从wiki中理解以下主题,但没有成功:Memory Go(lang)中的地址空间是多少?,memory,memory-management,concurrency,go,parallel-processing,Memory,Memory Management,Concurrency,Go,Parallel Processing,我试图理解Go中并发编程的基础知识。几乎所有文章都使用术语“地址空间”,例如:“所有goroutine共享相同的地址空间”。这是什么意思 我试图从wiki中理解以下主题,但没有成功: 然而目前我很难理解,因为我在内存管理和并发编程等领域的知识非常贫乏。有许多未知词,如段、页、相对/绝对地址、VAS等 谁能给我解释一下这个问题的基本原理吗?可能有一些有用的文章,我找不到。当应用程序在RAM上运行时,RAM中的地址由内存管理器分配给应用程序。这被称为地址空间 概念: 处理器(CPU)执行
谁能给我解释一下这个问题的基本原理吗?可能有一些有用的文章,我找不到。当应用程序在RAM上运行时,RAM中的地址由内存管理器分配给应用程序。这被称为地址空间 概念: 处理器(CPU)执行Fetch Decode Execute中的指令 周期它通过将应用程序中的指令提取到 RAM(随机存取存储器)。之所以这样做,是因为它非常重要 以高效的方式从磁盘一路获取它。有人需要保持沉默 跟踪内存使用情况,以便操作系统实现内存 经理你的应用程序,由一些程序组成,在你的例子中是这样的 是用Go编程语言编写的。执行脚本时, 操作系统以上述方式执行指令 读了你的帖子我能感同身受。随着节目越来越多,您提到的术语将变得越来越熟悉 我第一次遇到这些术语是在《操作系统》一书中,也就是《恐龙》一书中 希望这对您有所帮助。: “
go
”语句将函数调用作为独立的并发控制线程或goroutine
在同一线程中开始执行
谁能给我解释一下这个问题的基本原理吗
“地址空间”是一个通用术语,可适用于许多上下文:
地址空间是通过组合足够多的唯一标识的限定符来创建的,以使地址明确(在特定的地址空间内)
的演示文稿“”说明了通过在同一进程地址空间中使用goroutine解决的主要问题:
Dave对“地址空间”进行了限定,首先谈到线程:
由于进程切换可以发生在进程执行的任何点上,操作系统需要存储所有这些寄存器的内容,因为它不知道当前正在使用哪些寄存器
这导致了线程的发展,线程在概念上与进程相同,但共享相同的内存空间
(这是关于记忆的)
然后,Dave演示了进程地址空间中的堆栈(由进程管理的地址):
通常在进程的地址空间内
- 堆位于内存的底部,就在程序(文本)的上方,并向上增长
- 堆栈位于虚拟地址空间的顶部,向下增长
当应用程序在RAM上运行时,内存管理器会将RAM中的地址分配给应用程序
,什么是“在RAM上运行”?谁在RAM中分配内存?操作系统,程序?“内存管理器”是什么?请你具体解释一下……非常感谢!特别是这个链接@VonC,一个关于不断增长的1.3堆栈的问题。如果F()需要更多堆栈,会发生什么?是将G()和H()移到左边以腾出空间,还是在末尾复制F(),留下一个可用空间?谢谢@siritinga我不确定,但是F()
应该使用更大的堆栈进行复制(如中所示)。谢谢VonC,我想我在这里混合了一些概念。我想F()不能在图中增长,因为它没有运行,F()称为G(),G()称为H(),它们都在同一个goroutine中。如果F()位于不同的goroutine中,那么它将有自己的堆栈(每个goroutine一个堆栈)。“如果F()位于不同的goroutine中,那么它将有自己的堆栈(每个goroutine一个堆栈)”:是的。这意味着在新的“连续堆栈”(continuousstack)()中,如果其函数之一在当前堆栈中缺少空间,则会复制所有堆栈(到更大的堆栈中)。这似乎也是所描述的。