C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++標準におけるint型・long型のサイズとは?アーキテクチャ別データモデルの違いを徹底解説

C++におけるint型long型のサイズは、実行環境のシステムアーキテクチャやOS(オペレーティングシステム)によって異なります。C++標準では各整数型の厳密なビット幅を固定していないため、環境ごとに定められた「データモデル」に従ってサイズが決まります。

32ビットシステム:ILP32モデル

32ビットシステムでは、ILP32と呼ばれるデータモデルが標準です。このモデルでは、int・long・ポインタ変数がすべて32ビットとして扱われます。

64ビットシステム:LP64とLLP64の2種類

64ビットシステムでは、OSに応じて次の2つのデータモデルが使われています。

Linuxの場合:LP64モデル

LinuxではLP64モデルが採用されています。long型とポインタは64ビットですが、int型は32ビットのままです。

Windowsの場合:LLP64モデル

一方、WindowsではLLP64モデルが採用されています。このモデルではlong long型のみが64ビットとなり、int型もlong型も32ビットのまま維持されます。

データモデル別のサイズ比較表

型名ILP32(32bit)LP64(Linux 64bit)LLP64(Windows 64bit)
int32ビット32ビット32ビット
long32ビット64ビット32ビット
ポインタ32ビット64ビット64ビット
long long64ビット64ビット64ビット

サンプルコード

実際にsizeof演算子を使って、各型のサイズをビット単位で確認してみましょう。

#include <iostream>
using namespace std;
int main() {
    cout << "Size of int: " << sizeof(int) * 8 << " bits" << endl;
    cout << "Size of long: " << sizeof(long) * 8 << " bits" << endl;
    cout << "Size of long long: " << sizeof(long long) * 8 << " bits" << endl;
}

出力結果

Size of int: 32 bits
Size of long: 32 bits
Size of long long: 64 bits

まとめ:移植性の高いコードを書くために

このように、long型のサイズはOSによって32ビットにも64ビットにもなり得ます。そのため、特定のビット幅を前提としたコードを書く場合は、<cstdint>ヘッダーで提供されるint32_tint64_tなどの固定幅整数型を使用することをおすすめします。これにより、どの環境でも一貫した動作を実現できます。

  1. LinuxでのC/C++開発におすすめのIDE 6選|特徴と選び方を解説

    テキストエディタだけでは大規模開発は難しい大規模なプロジェクトを単なるテキストエディタだけで管理するのは容易ではありません。そうしたケースでは、IDE(統合開発環境)を活用することで生産性が向上し、ストレスも大幅に軽減されます。IDEにはさまざまな種類があるため、自分のニーズに合ったものを選ぶことが重要です。この記事では、Linuxで利用できるC/C++向けの優れたIDEを6つご紹介します。1. NetBeans(C/C++開発向け)NetBeansは、無料かつオープンソースの人気クロスプラットフォームIDEです。C/C++をはじめ、多くのプログラミング言語に対応しており、コミュニティが開発し

  2. C++のブール型の型指定子とは?bool型の基本と使い方を解説

    C++におけるブール型の型指定子C++で真偽値(ブール値)を扱うための型指定子は bool です。この型は、true(真) または false(偽) の2つの値のみを持つことができます。基本的な宣言方法bool型の変数は、次のように宣言して初期化できます。bool myBoolean = true;また、falseを代入することも可能です。bool isActive = false;bool型の特徴取り得る値:true または false のみ(trueは1、falseは0としても扱われます)サイズ:通常は1バイト(処理系によって異なる場合があります)ヘッダーファイル:C++言語に組み込まれて