gpt4 book ai didi

c++ - MySQL源代码中 "struct PSI_thread"的定义在哪里?

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:04 25 4
gpt4 key购买 nike

在研究MySQL 源代码时,我发现了一些没有任何定义的奇怪结构。比如mysql-server-code\include\mysql\psi\psi.h中的结构体PSI_thread。但是我知道源代码文件的某处必须有定义,否则无法编译。有谁知道结构的真正定义在哪里?

结构体PSI_thread的定义

enter image description here

最佳答案

它是一个不透明的结构

, 不透明类型是一种内容未知的结构;通常不透明类型的声明与您的代码在 header 中显示的完全相同:

struct PSI_thread;
typedef struct PSI_thread PSI_thread;

包含标题的代码会有一些限制:

  • 你不知道对象的大小。
  • 您不能直接声明具有该类型的对象,但您只能处理指针,这也意味着您不能解引用它们或分配新对象。

库(在您的例子中为 )提供了访问和处理类型本身的函数,包括分配和释放。这些函数不能简单地是内联函数,因为它们需要访问类型的内容才能工作。

当您需要导出库的接口(interface)时,不透明类型很有用:由于您不知道不透明类型的大小或内部顺序,因此库可以在不更改 ABI 的情况下更改不透明类型,因此需要重建使用它的软件。

您可以将其视为库的私有(private)上下文,库使用它来安全地完成其工作。


编辑

如果您无法在整个源代码中找到前向声明,您可以将其视为void *。一个空结构。

最大的区别是空结构与其他可能的类型相比是不同的类型,编译器会提示类型不匹配。

关于c++ - MySQL源代码中 "struct PSI_thread"的定义在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40395197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com