C++でメモリ全体を埋め尽くすプログラムの作り方
本記事では、シンプルなC++プログラムを書くことで、システムのメインメモリ(主記憶域)全体を埋め尽くす方法を解説します。仕組みは非常に単純で、動的メモリ確保を使って整数型の変数を繰り返し生成し続けることで、利用可能なメモリを次々と消費していきます。
動的メモリ確保の基本
C++では、new キーワードを使用することで、実行時に動的にメモリ領域を確保できます。new 演算子の基本的な構文は以下のとおりです。
pointer_var = new data_type
また、確保したメモリを解放するには delete キーワードを使用します。構文は次のようになります。
delete pointer_var
通常、new で確保したメモリは不要になった時点で delete によって解放すべきですが、今回のプログラムでは意図的に解放を行わず、メモリを占有し続けることで主記憶域を満たしていきます。
注意点
このプログラムを実行すると、システムのパフォーマンスが大幅に低下する可能性があります。メモリ不足に陥るため、OSや他のアプリケーションが正常に動作しなくなる恐れがあります。実行する場合は、重要な作業をしていない環境や、仮想マシン上でのテストを強く推奨します。
サンプルコード
以下のコードでは、無限ループの中で int 型変数へのポインタを new により動的に確保し続けます。確保されたメモリは解放されないため、最終的に利用可能なメモリが使い尽くされます。
#include<iostream>
using namespace std;
main() {
while(true) {
int *var = new int; // メモリを動的に確保
}
}実行結果
このプログラムは画面上に特別な出力を表示しません。代わりに、タスクマネージャー(Windows)やアクティビティモニタ(macOS)、top コマンド(Linux)などでメモリ使用量を確認すると、使用メモリが増加し続けている様子を観察できます。メモリが枯渇すると、プログラムは std::bad_alloc 例外を投げて異常終了するか、OS側でプロセスが強制終了される場合があります。
-
【C++】メモリ管理におけるベストフィット(最適適合)アルゴリズムの実装プログラム
ブロックサイズとプロセスサイズを格納した2つの配列が与えられたとき、メモリ管理における「ベストフィット(Best Fit)アルゴリズム」に従って割り当て結果を出力するのが本記事のテーマです。 ベストフィットアルゴリズムとは? ベストフィットはメモリ管理アルゴリズムの一種で、プロセスの要求サイズを満たす空きパーティションの中から「最も小さいもの」を割り当てる方式です。このアルゴリズムでは、メモリ上の全ブロックを走査し、プロセスにとって最小かつ最も適切なブロックを特定することで、メモリの無駄を最小限に抑えます。 具体的には、ブロックサイズとプロセスサイズを入力として受け取り、「各プロセスにどのブ
-
C++プログラムにおける二分探索(バイナリサーチ)の基本と実装
二分探索(バイナリサーチ)とは二分探索は「半区間探索」「対数探索」「バイナリチョップ」とも呼ばれる検索アルゴリズムで、ソート済みの配列の中から目的の値が存在する位置を効率的に見つけ出します。基本的な仕組みは非常にシンプルです。まず、探したい値(ターゲット値)を配列の中央の要素と比較します。一致しなかった場合は、ターゲット値が存在し得ない半分を丸ごと排除し、残りの半分に対して同様の比較を繰り返します。この「中央との比較」と「範囲の絞り込み」を続け、ターゲット値が見つかるか、検索範囲が空になる(=配列にその値が存在しない)かのどちらかで処理が終了します。アイデア自体は簡単ですが、正しく実装するには