最終更新日時: 2026年06月15日 14時22分22秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<cstdlib>

# std::free_sized(C++26)

    namespace std {
      void free_sized(void* ptr, size_t size);
    }

## 概要

確保時のサイズを指定して、確保したメモリを解放する。

C23で`<stdlib.h>`に追加された関数であり、C++26で`<cstdlib>`に取り込まれた。

## 事前条件

- `ptr`がヌルポインタであるか、もしくは`malloc()`・`calloc()`・`realloc()`などアライメントを指定せずにメモリを確保する関数が返したポインタであること
- `ptr`がヌルポインタでない場合、`size`はそのメモリの確保時に要求したサイズと等しいこと

## 効果

- `ptr`がヌルポインタの場合、なにもしない
- そうでない場合、`free()(ptr)`と等価である

## 戻り値

なし

## 備考

- この関数はスレッドセーフである
- 確保時のサイズを処理系に渡せるため、`free()`よりも効率的に解放できる可能性がある

## 例

    #include <cstdlib>

    int main()
    {
      int* p = static_cast<int*>(std::malloc(10 * sizeof(int)));
      std::free_sized(p, 10 * sizeof(int));
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌

## 関連項目

- `free()`: 確保したメモリを解放する
- `free_aligned_sized()`: アライメントと確保時のサイズを指定して、確保したメモリを解放する
- `malloc()`: メモリを確保する

## 参照

- P3348R4 C++26 should refer to C23 not C17
  - C++26がC23を参照するようになり、この関数が`<cstdlib>`に追加された