2017-05-06 21 views
4

FreeRTOSでは、ヒープは、ユーザーが変更できるファイルHに定義されているサイズ(コールがheapSize)を持つグローバルな配列に過ぎません。この配列は、画像のBSSセクションの一部として作成される初期化されていないグローバル配列であり、読み込み時に0が埋め込まれ、この配列からメモリの各割り当てが行われ、割り当てられたメモリのすべてのアドレスはこの配列のオフセットLinuxヒープ割り当て

ので、メモリサイズの最大利用のために、私たちは、プログラム全体のDataTextBSS領域の大きさを近似することができる、とheapSize = RAM_size - Text_size - Data_size - BSS_sizeのようなものにヒープサイズを定義します。

相当する実装がLinux OSであることを知りたいと思います。 Linuxは特定のRAMをスキャンし、実行時にそのサイズを決定できますか? Linuxはヒープを管理するための同等のデータ構造を持っていますか?もしそうなら、最初にこのデータ構造にどのようにメモリを割り当てますか?

+4

StackOverflowのQ&Aフォーマットでは、Linuxのメモリ管理ははるかに複雑です。最も重要なのは、Linuxは仮想メモリOSであり、カーネルとユーザランドのアドレス空間を分割し、それぞれに異なるメモリ割り当て方式を使用しています。 – datenwolf

+1

http://www.johnchukwuma.com/training/UnderstandingTheLinuxKernel3rdEdition.pdf –

+0

あなたのプログラムは '/ proc/meminfo'を読んで実際のメモリと使用されているメモリの量を判断できます。 – stark

答えて

0

相当する実装がLinux OSであることを知りたいと思います。

Linux Device Drivers, Third Editionの「第8章:メモリの割り当て」を参照してください。

0

Linuxのヒープは動的なので、より多くのメモリを要求するたびに大きくなります。これは、RAMの未使用部分がディスクに書き込まれるスワップファイルを使用して、物理メモリのサイズを超えて拡張できます。

だから、 "利用可能なメモリの量"ではなく、 "アプリケーションに必要なメモリ量"という点でもっと考える必要があると思います。

関連する問題