如果签名编码标准化了,我能否将不同厂商编译器产生的程式码连结起来?
简短的回答:可能不行。
换句话说,有人希望标准化的签名编码规则能并入拟议中的 C++ ANSI 标准,避免还
要为不同厂商的编译器购买不同版本的物件程式库。然而不同的系统实作中,签名编
码的差异性只占一小部份而已,即使是在同一个基台(platform)上。这里列出一部
份其他的差异处:
1) 成员函数隐含的引数个数和型态。
1a) 'this' 有被特殊处理吗?
1b) 传值的指标放在哪里?
2) 假设有用到 vtable 虚拟表格的话:
2a) 它的内容及配置?
2b) 多重继承时,'this' 在何处/如何调整?
3) 类别如何配置,包含:
3a) 基底类别的位置?
3b) 虚拟基底类别的处理?
3c) 虚拟表格指标的位置,如果有用虚拟表格的话?
4) 函数的呼叫惯例,包含:
4a) 呼叫者还是被呼叫者负责调整堆叠?
4b) 实际参数放到哪里?
4c) 实际参数传递之顺序?
4d) 暂存器如何存放?
4e) 传回值放到哪里?
4f) 对传入/传回 struct 或 double 有无特殊的规定?
4g) 呼叫末端函数(leaf function)有无特殊的暂存器存放规定?
5) run-time-type-identification 如何配置?
6) 当一个例外被 throw 时,执行期的例外处理系统如何得知哪一个区域物件该被解
构?
简短的回答:可能不行。
换句话说,有人希望标准化的签名编码规则能并入拟议中的 C++ ANSI 标准,避免还
要为不同厂商的编译器购买不同版本的物件程式库。然而不同的系统实作中,签名编
码的差异性只占一小部份而已,即使是在同一个基台(platform)上。这里列出一部
份其他的差异处:
1) 成员函数隐含的引数个数和型态。
1a) 'this' 有被特殊处理吗?
1b) 传值的指标放在哪里?
2) 假设有用到 vtable 虚拟表格的话:
2a) 它的内容及配置?
2b) 多重继承时,'this' 在何处/如何调整?
3) 类别如何配置,包含:
3a) 基底类别的位置?
3b) 虚拟基底类别的处理?
3c) 虚拟表格指标的位置,如果有用虚拟表格的话?
4) 函数的呼叫惯例,包含:
4a) 呼叫者还是被呼叫者负责调整堆叠?
4b) 实际参数放到哪里?
4c) 实际参数传递之顺序?
4d) 暂存器如何存放?
4e) 传回值放到哪里?
4f) 对传入/传回 struct 或 double 有无特殊的规定?
4g) 呼叫末端函数(leaf function)有无特殊的暂存器存放规定?
5) run-time-type-identification 如何配置?
6) 当一个例外被 throw 时,执行期的例外处理系统如何得知哪一个区域物件该被解
构?
Go confidently in the directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!