3

社内のオペレーティング システムが組み込まれた 8051 ベースのボードを受け取りました。SDCC を使用して OS 上にアプリケーションを作成しています。また、malloc を使用できないため、メモリを静的に割り当てる必要があります。何故ですか?malloc はコンパイラ内の動的ライブラリにあるはずではありませんか?

4

3 に答える 3

8

TL;DR:

C で malloc() が使用できないのはなぜですか?

一般的に言える唯一のことはmalloc()、すべての適合するホストされた C 実装によって提供されるということですが、別の適合する種類を含む他の種類もあります。


malloc はコンパイラ内の動的ライブラリにあるはずではありませんか?

ではない正確に。 malloc()は C 標準ライブラリの一部であるため、すべての適合するホストされた C 実装によって提供されます。AC 実装は、C ソース コードを実行可能プログラムに変換するシステムと、生成されたプログラムを実行するためのメカニズムと環境で構成されます。前者は通常、コンパイラを中心に展開します。後者には、実装が提供するのと同じくらい多くの C 標準ライブラリが含まれており、この部分がmalloc利用可能な場合に常駐します。したがって、いいえ、malloc技術的にはコンパイラの一部ではありません。

それはあなたが意図した違いではないと確信していますが、それは答えに影響します. ホストされた実装mallocによって提供されると言ったことに注意してください。これらは、汎用オペレーティング システムで通常遭遇する種類のものです。これらは、ホスト OS を介して標準的な方法で起動されるプログラムを作成し、OS と連携して C 標準ライブラリのすべての機能を提供します。しかし、独立した実装もあります。主な違いの 1 つは、独立した実装では、.malloc()

あなたのような組み込みシステムで、独立した実装が使用されていることがよくあります。また、OS カーネル、ブート ローダー、およびベア メタルで直接実行されるその他のプログラムにも使用されます。プログラムを OS 上で実行すると、環境が組み込みシステムのキャデラックのようになりますが、C 実装がホストされたものであるとは限りません。を提供しないため、ホストされた実装に準拠mallocすることはできませんが、独立した実装に準拠することはできます。いずれかである場合、どちらであると主張するかを文書化する必要があります。独立しているが、他の標準ライブラリ関数を提供する場合、それは贅沢と考えることができます。

于 2018-09-12T13:19:28.190 に答える