MySQL源代码中“struct PSI_thread”的定义在哪里?
Posted
技术标签:
【中文标题】MySQL源代码中“struct PSI_thread”的定义在哪里?【英文标题】:where is the definition of the "struct PSI_thread" in MySQL source code? 【发布时间】:2016-11-03 06:35:04 【问题描述】:在研究mysql
源代码时,我发现了一些没有任何定义的奇怪结构。比如mysql-server-code\include\mysql\psi\psi.h
中的struct PSI_thread
。但是我知道源代码文件中一定有定义,否则无法编译。有谁知道结构的真正定义在哪里?
结构体PSI_thread的定义
【问题讨论】:
【参考方案1】:这是一个不透明的结构
对于c,不透明类型是一种内容未知的结构; 通常 opaques 类型完全按照您的代码显示在标题中声明:
struct PSI_thread;
typedef struct PSI_thread PSI_thread;
包含头部的代码会有一些限制:
您不知道对象的大小。 您不能直接声明具有该类型的对象,但只能处理指针,这也意味着您不能取消引用它们或分配新对象。库(在您的情况下为mysql)提供了访问和处理类型本身的函数,包括分配和释放。 这些函数不能简单地是内联函数,因为它们需要访问类型的内容才能工作。
不透明类型很有用,当您需要导出库的接口时:因为您不知道不透明类型的大小或内部顺序,所以库可以更改 opaque 类型而不更改 ABI,因此需要使用它重建软件。
您可以将其视为库的私有上下文,库使用它来安全地完成其工作。
编辑
如果您无法在整个源代码中找到前向声明,您可以将其视为void *
。一个空的结构。
最大的区别在于空结构与其他可能的类型相比是不同的类型,编译器可能会抱怨类型不匹配。
【讨论】:
感谢您的回复,我知道C中的不透明类型。但我很困惑,即使我在整个源代码项目中查找结构,我仍然找不到它。我认为结构的真正定义必须在源代码文件(.h文件,.cc文件或.cpp文件)中的某个地方,不是吗?以上是关于MySQL源代码中“struct PSI_thread”的定义在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL源代码中“struct PSI_thread”的定义在哪里?
MySQL 错误代码:在 MySQL Workbench 中更新期间出现 1175
MySql.Data.dll 中出现“MySql.Data.MySqlClient.MySqlException”类型的异常,但未在用户代码中处理