【C言語】mallocで確保できるメモリの上限

正直何が怖いのかよくわからずmallocとfreeを使っていた。 昨年末からの不具合の原因がstdlib.hによるものだとわかったのは昨日。 突如として牙をむいて襲いかかってきた…。

https://ja.m.wikipedia.org/wiki/malloc

上記リンクより最大確保サイズのタブを引用する

mallocが確保できるメモリブロックの最大サイズはシステムに依存する。特に物理メモリ量とOSの実装に依存する。理論上の最大値はsizet型(メモリ領域のサイズを表す符号なし整数)である。その最大値は2CHARBIT × sizeof(sizet) − 1か、C99標準の定数SIZEMAXである。C言語標準は一回の確保で保証される最小値を提示している(C89では0x7FFF、C99では0xFFFF)。

私が業務で使っているのはC89 (古いマイコンを弄っているのです)

一度の確保で4KBが保証される限度ということ パソコン同様マイコンも資源が潤沢にあるイメージだっただけに、ゆとり世代的には大変衝撃を受けた

ちなみに不具合の原因はビルドオプションに設定していたヒープ領域が不足していたからでした ここまで苦労して調査したのにmallocは直接の原因ではなかった 無念……