为什么 Go 中的堆是可执行的?

Why is the heap in Go executable?

我最近看了这篇文章http://codearcana.com/posts/2012/05/06/securing-and-exploiting-go-binaries.html 它在 Go 中声称堆是可执行的。这对我提出了几个关于运行时和操作系统之间交互的不同问题。

在 C 语言中,当程序需要 space 在堆上时,它会调用 malloc,然后调用 sbrk 为其提供内存。据我所知,在 C 中,堆是只读的。

为什么Go中的堆是可执行的?应用程序有什么不同 - OS Go 中的交互与 C 中的交互?

谢谢

Why is the heap in Go executable?

Go 堆自 2013 年以来不可执行。

heap is no longer executable.

代码是在运行时为 Go 1.1 之前的函数文字生成的,因此需要一个可执行堆。函数调用 revamped in Go 1.1 消除了对可执行堆的需求并提供其他好处。