これを何度も書くのにうんざりしました:
double* data = (double*)malloc(20 * sizeof(double)); if (data == NULL) { fputs("out of memory", stderr); abort(); }
そして今日、emalloc() や ecalloc() のような e___() 関数のファミリーがあり、malloc() から返されたポインタが NULL の場合にプロセスを終了することを知りました。これらの関数は、オペレーティング システムの util.h システム ヘッダーの BSD ファミリにのみ存在します。これらは標準の C 関数ではありません。
#include <util.h> void (*)(int, const char *, ...) esetfunc(void (*)(int, const char *, ...)); int easprintf(char ** restrict str, const char * restrict fmt, ...); FILE * efopen(const char *p, const char *m); void * ecalloc(size_t n, size_t s); void * emalloc(size_t n); void * erealloc(void *p, size_t n); void ereallocarr(void *p, size_t n, size_t s); char * estrdup(const char *s); char * estrndup(const char *s, size_t len); size_t estrlcat(char *dst, const char *src, size_t len); size_t estrlcpy(char *dst, const char *src, size_t len); intmax_t estrtoi(const char * nptr, int base, intmax_t lo, intmax_t hi); uintmax_t estrtou(const char * nptr, int base, uintmax_t lo, uintmax_t hi); int evasprintf(char ** restrict str, const char * restrict fmt, ...); </util.h>
easprintf()、efopen()、ecalloc()、emalloc()、erealloc()、erallocarr()、estrdup()、estrndup()、estrlcat()、estrlcpy()、estrtoi()、estrtou( )、および evasprintf() 関数は、エラーが発生した場合に、esetfunc() で設定できるインストール済みのエラー ハンドラーを呼び出す点を除き、e で始まらない対応する関数とまったく同じように動作します。
文字列処理関数の場合、宛先バッファーが完全な文字列を保持するのに十分な大きさではない場合、エラーになります。メモリを割り当てる関数やファイルを開く関数の場合、null ポインターを返すとエラーになります。 デフォルトのエラー ハンドラは err() です。関数 esetfunc() は、前のエラー ハンドラー関数を返します。 NULL エラー ハンドラーは exit() を呼び出すだけです。
— emalloc(3) - NetBSD マニュアルページ
これらの関数は比較的単純です。これらは自分で簡単に実装できます。
// I don't know if static or inline is better. inline void * emalloc(size_t n) { void *p = malloc(n); if (p == NULL) { fputs("out of memory", stderr); abort(); } return p; } // Do the same wrapper thing for all the other functions.
これがオペレーティング システムの C 標準ライブラリに組み込まれているものであるということは素晴らしいことだと思いました。もちろん電池も付属しています。
他の言語ではメモリ不足エラーが発生した場合はどうなりますか?
- Java: 例外をスローします
- C : 例外をスローします
- Rust: アボートまたはパニック
- JavaScript: エンジンをクラッシュさせます
- Python: 特別な例外をスローします
- 移動: 終了
そして、C: null ポインターを返します。 ?♀️ その制御が必要な場合は最適ですが、幸せな道を望んでいる場合は面倒です。
以上がTIL emalloc() がメモリ不足エラーで自動終了するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、C標準テンプレートライブラリ(STL)について説明し、そのコアコンポーネント(コンテナ、イテレーター、アルゴリズム、およびファンクター)に焦点を当てています。 これらが一般的なプログラミングを有効にし、コード効率を向上させ、読みやすさを改善する方法を詳述しています。

この記事では、cの効率的なSTLアルゴリズムの使用について詳しく説明しています。 データ構造の選択(ベクトル対リスト)、アルゴリズムの複雑さ分析(STD :: STD :: STD :: PARTIAL_SORTなど)、イテレーターの使用、および並列実行を強調しています。 のような一般的な落とし穴

この記事では、Cでの効果的な例外処理、トライ、キャッチ、スローメカニックをカバーしています。 RAIIなどのベストプラクティス、不必要なキャッチブロックを避け、ログの例外をロギングすることを強調しています。 この記事では、パフォーマンスについても説明しています

この記事では、不必要なコピーを回避することにより、パフォーマンスを向上させるために、CのMove Semanticsを使用することについて説明します。 STD :: MOVEを使用して、移動コンストラクターと割り当てオペレーターの実装をカバーし、効果的なAPPLの重要なシナリオと落とし穴を識別します

C 20の範囲は、表現力、複合性、効率を伴うデータ操作を強化します。複雑な変換を簡素化し、既存のコードベースに統合して、パフォーマンスと保守性を向上させます。

この記事では、Cでの動的発送、そのパフォーマンスコスト、および最適化戦略について説明します。動的ディスパッチがパフォーマンスに影響を与え、静的ディスパッチと比較するシナリオを強調し、パフォーマンスとパフォーマンスのトレードオフを強調します

記事では、移動セマンティクス、完璧な転送、リソース管理のためのcでのr値参照の効果的な使用について説明し、ベストプラクティスとパフォーマンスの改善を強調しています。(159文字)

Cメモリ管理は、新しい、削除、およびスマートポインターを使用します。この記事では、マニュアルと自動化された管理と、スマートポインターがメモリリークを防ぐ方法について説明します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック



