为什么向结构体添加函数不会使其实例变大?

Kam*_*m12 1 memory memory-layout swift

struct A {
  var a:Int = 2
  
  func f()->Int {
    return 2*a
  }
}

var obj = A()
obj.f()
Run Code Online (Sandbox Code Playgroud)

大小obj为8字节。如果我添加新属性,大小将会改变。没关系。

我想知道编译器如何关心函数的内存。无论struct中有没有func,大小都是一样的。但 func 也是信息,我想它也应该占用内存(也许我错了)。那么这个过程是如何进行的呢?

如果您推荐我主题名称以便我可以阅读,我将不胜感激。

谢谢

Ale*_*ica 5

尽管就源代码f出现而言,该函数似乎嵌套在结构中A,但这并不是编译后的二进制文件中实际发生的情况。

只有一种实现f,并且它在 的所有实例之间共享A。它存储在全局程序文本中,与任何其他自由函数没有什么不同。

虽然专注于 C++,但您可以在https://en.wikipedia.org/wiki/Virtual_method_table上获得更多信息