看起来很清楚它应该设置一些东西。

  1. 具体什么时候运行?
  2. 为什么有两个括号?
  3. __attribute__一个函数?
  4. 这在 C 中有效吗?
  5. 它所使用的函数是否需要是静态的?
  6. 什么时候__attribute__((destructor))跑步?

Objective-C 中的示例

__attribute__((constructor))
static void initialize_navigationBarImages() {
  navigationBarImages = [[NSMutableDictionary alloc] init];
}

__attribute__((destructor))
static void destroy_navigationBarImages() {
  [navigationBarImages release];
}

答案

  1. 它在加载共享库时运行,通常是在程序启动期间。
  2. 所有 GCC 属性都是如此;
  3. GCC 特定语法。
  4. 是的,这适用于 C 和 C 。
  5. 不,该函数不需要是静态的。
  6. 析构函数在共享库卸载时运行,通常在程序退出时运行。

因此,构造函数和析构函数的工作方式是共享对象文件包含特殊部分(ELF 上的 .ctors 和 .dtors),其中包含对分别用构造函数和析构函数属性标记的函数的引用。

想想看,普通的静态链接器中可能存在一些类似的魔力,因此无论用户选择静态还是动态链接,在启动/关闭时都会运行相同的代码。

来自: stackoverflow.com