C++ 的 Name Mangling 是什么?

2017-05-13 09:52:11 +08:00
 QKID
  1. 什么是 Name Mangling

编程语言组织程序,都有一定的可见范围,比如 Java 的包、C/C++的文件。就像我们平时使用的文件夹一样,有了这些组织机制,变量、函数的命名在一定程度上就可以重复。

但在程序链接时,这些机制多少都要失效一些,就像每个小朋友在家都叫宝宝,到了幼儿园就没办法通过宝宝来区分彼此了。为了解决名字的唯一性,就需要 Name Mangling 技术。

其实说白了就是对名字进行重新编码的一种规则。比如使用 VIM 随便打开一个 ELF 文件,或是链接时,我们有时候可以看到一些类似与下面这样的古怪字符串:

_ZN9NS_QZSOCK10CTcpClient11SendAndRecvEPciRiRjd 这就是经过 Name Mangling 处理后的符号。

阅读全文

2776 次点击
所在节点    程序员
3 条回复
onlyice
2017-05-13 12:03:26 +08:00
NS_QZSOCK......哈哈哈
zhidian
2017-05-13 12:51:19 +08:00
我可以把你拉黑吗?
visionsmile
2017-05-13 18:47:30 +08:00
我觉得把 name mangling 和函数签名放在一起讲比较合适....
我之前也写过一篇类似的东西: [为什么需要 extern "c"?]( http://imzlp.me/posts/5392/) ,有兴趣的可以看看,如有不足之处望不吝指正。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361030

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX