2013-06-27 3 views
5

私はSDCC 3.1.0でこのコードをコンパイルし実行し、(WinCPC 0.9.26ワインで実行されていると、エミュレーション下)のAmstrad CPC 464上でそれを実行します。SDCCとのmalloc() - よりもはるかに少ないメモリを割り当てるには、利用可能である

void _test_malloc() 
{ 
    long idx = 0; 
    while (1) 
    { 
     if (malloc(5)) 
    { 
     printf("%ld\r\n", ++idx); 
    } 
     else 
    { 
     printf("done"); 
     break; 
    } 
    } 
} 

... 92 malloc()に一貫してタップアウトします。私はそれを460バイトにして、2つの質問につなげます:

  • このシステムではmalloc()は何をしていますか?私は、ソートの振る舞いは、64kBのシステムと128kBのシステムで一貫しているにも64kBのシステム上の大きさより多くのストレージの順序のために

  • を期待していました。手動バンクの切り替えのように、追加メモリにアクセスするために何らかの魔法を実行する必要がありますか?

+0

なぜ5バイト単位で増加するのですか?大きなチャンクを割り当てると(ちょうど興味がある)、何が起こりますか?その他の質問:どのくらいのスタックスペースを取ることができますか? –

答えて

4

答えは、Z80システムでは、ヒープサイズが1kBにハードコードされているということです。 SDCC-userメーリングリスト上マールテンBrockさんansweredこの:あなたは標準1kBのが十分 ない場合は、ヒープを自分で作成する必要が

こんにちはダンカン、

。 heap.sをプロジェクトディレクトリにコピーし、それを変更して 希望サイズを作成します。それを組み立ててプロジェクトにリンクします。

_heap.cで定義されているmcs51ヒープとは異なり、マニュアルではZ80用に記載されている ではありません。追跡システムで_heap.cとheap.sの更新またはマージをドキュメント に依頼してください。実際に

マールテン

5

ダンカンベインが言うように、SDCCはZ80用の実装デフォルトのメモリマネージャでは非常に狭いヒープ領域があります。あなたが実際のAmstrad CPC上の動的メモリを必要とする場合

しかし、SDCCのヒープを変更しようとする前に、あなたが考慮すべきです。一般的に、ハードウェア全体を所有するスタンドアロンアプリケーションを実行するときは、ダイナミックメモリの使用については何の意味もありません。あなたはあなたが持っているメモリの量をテストして知ることができ、あなたはいつでもどこでもメモリに書き込むことができます。メモリ保護はなく、他のアプリケーションはバックグラウンドで実行されません。あなたは(あなたがあなたのデータになりたいとどのくらいのスペースを使用する)と、直接メモリを管理する独自のメモリマップを設計するため

したがって、非常に好適です。さらに、このマシンではコードの最適化が非常に重要です。手動でメモリを管理することは、最適化には非常に重要です。

あなたのコードがアムストラッドCPC(すなわちSymbosのような近代的なOSを使用していない)で直接実行されている場合は、手動で銀行がメモリにアクセスするための切り替えに対処する必要があります。 Z80 CPUには16ビットバスがあり、バンク切り替えなしで64KBのメモリしかアドレス指定できません。

+0

静的メモリ割り当ての欠点は、アプリケーションが同時にすべてのバッファをいっぱいにしていなくても、すべてのバッファのワーストケースの制限に対して効果的に支払うことです。このようなシステムでは、コストも非常に高いですが、確かに私はダイナミックアロケーションを外していません(ただし、一般的な「malloc」は確かに出ていますが)。) – doynax

+0

実際、あなたがそれを考えるなら、それはまさに欠点ではありません。アプリケーションでXデータを管理したい場合は、そのメモリを使用可能にするか、それを行うことができません。動的に行う場合は、その領域をヒープにも割り当てる必要があります。 – ronaldo

+0

(続き...) 私の視点からは、独自の目的を果たし、直接管理するために、自分のメモリプールを設計する方が一般的に面白いです。特に限られたリソースでは、最悪の場合の制限を常に考慮する必要があります。 私の一般的なアドバイスは、事前にアプローチを検討し、デフォルトに頼らないことです。残りは私の個人的な見解です。 – ronaldo

関連する問題