コンピューティングにおいて、オーバーヘッドとは、目的の達成に直接関係のない側面のためにコンピューティング リソースを消費することです。オーバーヘッドはより一般的な処理に必要であり、より焦点を絞った目標の達成に影響を与えます。オーバーヘッドは、処理速度の低下、メモリの減少、ストレージ容量の減少、ネットワーク帯域幅の減少、レイテンシの延長などの側面として現れます。 [ 1 ]オーバーヘッドは、構造、エラー訂正、機能の組み込みに関してソフトウェア設計に影響を与える可能性があります。
コンピューティングにおけるオーバーヘッドは、エンジニアリングオーバーヘッドの特殊なケースであり、ビジネスにおけるオーバーヘッドと同じ本質的な意味を持ちます。つまり、組織オーバーヘッドです。
プログラマーやソフトウェアエンジニアは、それぞれに既知の特性を持つ複数のアルゴリズム、エンコーディング、データ型、データ構造の中から選択することができます。それらを選択する際には、それぞれのオーバーヘッドも考慮する必要があります。
ソフトウェアエンジニアリングにおいて、オーバーヘッドは新製品に機能を追加するかどうか、あるいはバグを修正するかどうかの決定に影響を与える可能性があります。オーバーヘッドが大きい機能は追加されないか、追加するには多額の金銭的インセンティブが必要となる場合があります。多くの場合、ソフトウェアプロバイダーは自社製品のバグを十分に認識していても、オーバーヘッドが大きいため、バグを修正するメリットがコストに見合わないと判断します。
例えば、暗黙的なデータ構造や簡潔なデータ構造は、メモリ使用量のオーバーヘッドを低く抑えることができるが、その代償としてパフォーマンスが低下する(空間/時間トレードオフ)。
アルゴリズムの複雑さは、一般的にビッグオー記法を用いて表されます。これは、実行時間やメモリ使用量については何も言及せず、入力サイズに応じて複雑さがどのように増加するかを示します。オーバーヘッドはマシンによって異なるため、意図的にこの計算には含まれません。一方、アルゴリズムの基本的な実行時間はマシンに依存しません。
これは、あらゆる種類の資源(複雑さとオーバーヘッドの組み合わせ(ただし、決して些細なものではない))を考慮に入れたアルゴリズム効率とは対照的である。
ファイルシステムは、ファイルの内容に加えて、メタデータ(ファイル名や更新日時など)、階層的なディレクトリ構造など、オーバーヘッド情報のためにストレージ領域を使用します。一般的に、多数の小さなファイルは、少数の大きなファイルよりも多くのオーバーヘッドを必要とします。
CPU キャッシュの容量とは、オーバーヘッド データを含めて格納できる最大データ量であり、保持できるユーザー コンテンツの量ではありません。たとえば、4 KB の容量のキャッシュは、フレーム、アドレス、タグ情報などのオーバーヘッド ビットにスペースの一部が必要なため、 4 KB 未満のユーザー データしか格納できません。[ 2 ]
通信ネットワーク上でデータペイロードを確実に送信するには、ペイロード自体を送信するだけでなく、宛先に到達するために必要なさまざまな制御データやシグナリングデータ(TCP )も送信する必要があります。この追加データはメッセージの本質的な意味には寄与しないため、いわゆるプロトコルオーバーヘッドが発生します。 [ 3 ] [ 4 ]
電話においては、番号ダイヤルや通話接続時間はオーバーヘッドとなる。双方向(ただし半二重)無線においては、衝突を回避するために必要な「オーバー」信号などの使用もオーバーヘッドとなる。
プロトコルオーバーヘッドは、非アプリケーションバイト(プロトコルとフレーム同期)をメッセージの総バイト数で割った値として表すことができます。
情報やデータのエンコードにもオーバーヘッドが発生します。日付と時刻「2011-07-12 07:18:47」は、32ビット符号付き整数を使用したUnixタイムとして表現でき、わずか4バイトしか消費しません。ISO 8601形式のUTF-8エンコード文字列として表現すると、日付は19バイトを消費し、バイナリ整数表現に比べて375%のサイズオーバーヘッドが発生します。XMLでは、この日付は次のように記述でき、218文字のオーバーヘッドが発生しますが、インデックス1のCHANGEDATEであるという意味的なコンテキストが追加されます。13104479272011-07-12 07:18:47
<?xml version="1.0" encoding="UTF-8"?> <datetime qualifier= "changedate" index= "1" > <year> 2011 </year> <month> 07 </month> <day> 12 </day> <hour> 07 </hour> <minute> 18 </minute> <second> 47 </second> </datetime>UTF-8でエンコードされたXMLから得られる349バイトは、元の整数表現と比較して8625%のサイズオーバーヘッドに相当する。
関数呼び出しには、スタック管理やパラメータ受け渡しなどの操作のために、比較的少量の実行時オーバーヘッドが必要です。 [ 5 ]オーバーヘッドは比較的小さいですが、呼び出しが多い場合(ループ内など)やタイミング要件が厳しい場合は問題になることがあります。コンパイラによっては、関数をインライン化して関数呼び出しをなくすことで、このオーバーヘッドを最小限に抑えることができます。[ 6 ]