1. カスタムメモリアロケータの実装
パフォーマンス向上のため、確保済みの生のメモリ領域を特定のオブジェクトの配置場所として再解釈します。
alignas(MyObject) char buffer[...];
MyObject* obj_ptr = reinterpret_cast<MyObject*>(buffer);
new (obj_ptr) MyObject(42);
シミュレーション
2. ハードウェアレジスタへの直接アクセス
特定の物理メモリアドレス(数値)を、ハードウェアレジスタを操作するためのポインタに変換します。
#define GPIO_ADDR 0x40020C14
volatile unsigned int* reg = reinterpret_cast<...>(GPIO_ADDR);
*reg |= (1 << 5); // 5番ピンをON
シミュレーション
3. シリアライズとネットワーク通信
ネットワークから受信したバイトストリームを、特定のプロトコルヘッダ構造体として解釈し、各フィールドにアクセスします。
struct PacketHeader { ... };
const PacketHeader* h = reinterpret_cast<...>(buffer);
std::cout << h->packet_id;
シミュレーション
受信バッファ (Bytes)
Packet ID: 100
Payload Size: 1024
Flags: 1
4. オブジェクトのバイト列表現のハッシュ計算
任意のオブジェクトのメモリ上の表現(バイト列)に直接アクセスし、ハッシュ値を計算します。
template <typename T>
unsigned long hash_bytes(const T& obj) {
const char* p = reinterpret_cast<...>(&obj);
// ... 1バイトずつハッシュ計算 ...
}
シミュレーション
Point obj = {10, 20};
Hash: 5381