V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
QKID
V2EX  ›  程序员

C++ 的 Name Mangling 是什么?

  •  
  •   QKID · 2017-05-13 09:52:11 +08:00 · 2904 次点击
    这是一个创建于 2752 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 什么是 Name Mangling

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

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

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

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

    阅读全文

    onlyice
        1
    onlyice  
       2017-05-13 12:03:26 +08:00
    NS_QZSOCK......哈哈哈
    zhidian
        2
    zhidian  
       2017-05-13 12:51:19 +08:00
    我可以把你拉黑吗?
    visionsmile
        3
    visionsmile  
       2017-05-13 18:47:30 +08:00 via Android   ❤️ 1
    我觉得把 name mangling 和函数签名放在一起讲比较合适....
    我之前也写过一篇类似的东西: [为什么需要 extern "c"?]( http://imzlp.me/posts/5392/) ,有兴趣的可以看看,如有不足之处望不吝指正。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2701 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:36 · PVG 18:36 · LAX 02:36 · JFK 05:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.