• ベストアンサー

mallocで確保するメモリの領域を限定する方法

mallocで確保するメモリの領域を限定する方法というものは存在するのでしょうか? 例えば、 mallocを使ってメモリを確保するときに、 アドレス:0x00001000から0x00002000の間でメモリを確保してください。 といった感じです。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

特定アドレスのメモリを割り付けるのであれば、静的に割り付けるか、それに近い方法を取らざるをえません。 処理系に依存しない方法はありませんので、処理系を補足してください。 いずれにせよ、取りうる方法は限られています。 ひとつは、リンク時にアドレス指定で配列を割り付ける方法であり、もうひとつは(もし使えるのであれば)MMUを自分で制御して、該当アドレスに仮想メモリを配置する方法です。 ハードウェアの設計も自分でできる(能力的にも権限的にも)のであれば、もっと別の方法があるかもしれません。

SSAnko
質問者

お礼

ありがとうございました。

その他の回答 (4)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.4

自前でmallocを実装して標準関数の代わりに使う。 質問からはmallocで確保されるべき全てのメモリを一定範囲のアドレスにしたいのか、それとも呼出しごとにアドレス範囲を指定したいのか不明だが、後者なら範囲指定の追加引数を取る独自関数を作れば良い。前者はmallocを独自に作って標準関数の代わりにリンクすれば良いが、結構面倒かもしれない。

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.3

mmap() の MAP_FIXED とかの話?

回答No.2

C言語の仕様では不可能です。特定のOS、コンパイラでは可能かもしれません。 > 実際にアドレス空間を割り当てるのは、コンパイラオプションとかリンカーの役目。 静的なメモリ割り当てはそうですが、mallocでのメモリ割り当てはランタイムの役割なので コンパイラオプションやリンカーは関係ありません。 そもそも静的に割り当てられない(コンパイル時に決定できない)からmallocを使うのだと思うけど。

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.1

出来ません。 実際にアドレス空間を割り当てるのは、コンパイラオプションとかリンカーの役目。

関連するQ&A