2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

マングリングとは

Last updated at Posted at 2023-11-05

はじめに

毎週1本様々な技術に関する記事を投稿しています。
もし興味のある方は下のリンクから他の記事も見ていただければ幸いです。
@7_inai_

マングリングとは

マングリング(名前修飾)とは、コンパイラが関数や変数の名前を変更し一意にすることを指します。
マングリングは、c++のようなコンパイル言語で使用されることが一般的です。

なぜマングリングが必要なの?

①名前空間の解決

プログラムが複数のモジュールやライブラリを持つ場合、同じ名前の関数や変数が使用されていても、マングリングにより区別 できるようになります。

②関数のオーバーロード

同じ名前の関数が異なる引数リストを持つ場合、コンパイラはそれらの関数を区別するために引数の型情報を含めた名前を生成します。これにより、関数オーバーロードが可能になります。
例)

  • マングリング前(c++)
    void MyClass::myMethod(int, double)
  • マングリング後
    _ZN8MyClass9myMethodEid
    _ZN: グローバル修飾子
    8MyClass: クラス名
    9myMethod: 関数名
    E: 引数の型
    i: int型
    d: double型

※グローバル修飾子:
C++では、異なるスコープ内で同じ名前の関数や変数を区別するために、名前に修飾子を追加します。この修飾子は、クラス名や名前空間を含むグローバルスコープ(大域スコープ)を表すものです。

③テンプレートの特殊化

テンプレートクラスや関数の特殊化において、テンプレートの特殊化を識別し、正確に対応する具体的な型を選択します。

終わりに

マングリングは一般的にプログラムの内部の実装の詳細であるため、開発者が常に意識する必要はありません。ただし、特にライブラリの開発、外部ライブラリの使用、リンク処理、デバッグ、およびプロファイリングの段階で、マングリングに対する基本的な理解が役立つことがあるので、頭の片隅に覚えておくと良いでしょう。

最後までお付き合いくださりありがとうございました。

2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?