• ベストアンサー

HP-UXでの構造体サイズの制限について

現在HP-UX上でC言語を使ったプログラムを組んでいます。 UNIXではプログラムで使用する、1構造体(変数)のサイズ制限等はあるのでしょうか? 制限があればどこに定義されているのでしょうか? 漠然とした質問ですが、回答の方お願いいたします。

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

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

ユーザプログラムにシステムリソースを食いつぶされては困りますので 当然、制限はあります。 構造体に限った事ではありませんが、ulimit あるいは limit コマンドで プロセスが使用できるリソース量が制限されています。 あなたのOSで確認してください。 「man bash」からulimitの説明 現在の制限を全て報告する -c 生成されるコアファイル (core) の最大サイズ -d プロセスのデータセグメントの最大サイズ -f シェルが生成できるファイルの最大サイズ -l メモリにロックできる最大サイズ -m 常駐セットサイズの最大値 -n オープンできるファイル・ディスクリプターの最大数 -p 512 バイトブロック単位でのパイプのサイズ -s 最大スタックサイズ -t CPU 時間の最大量 (秒単位) -u 1 人のユーザが使用できる最大のプロセス数 -v シェルが使用できる最大の仮想メモリ量

Nao7987
質問者

お礼

回答ありがとうございます。 お礼が遅くなりまして申し訳ありませんでした。 上記コマンドについて新しく知ることができてよかったです。

その他の回答 (2)

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.3

#1です。 ちょっと簡単に書きすぎました。すみません。 論理的制限とか定義がないというのは、C言語としての話です。 OSから見た場合は、unixとしては#2さんのおっしゃるとおりでulimitコマンドなどを用いて制限を確認したり変更(権限があれば)したりできます。 なお、パラメータというのは関数呼び出しのことですよね? それはまた別の話です。関数のパラメータは通常スタックに積むので、スタックエリアのサイズの影響を受けます。このサイズは環境依存で、しかもCPUによってはスタックのオーバフローを検出できないものもあるのであまりでかい構造体を直接引数に与えてしまうと最悪の場合暴走します。最近のCPUではそういうことはないと思いますが。。。

Nao7987
質問者

お礼

再びの回答ありがとうございました。 お礼の方が遅れて申し訳ありません。 パラメータは関数呼び出しのことです。 ええと、せっかく教えていただいたのですが余りよくわからないので詳しく教えていただけると、ありがたいのですが。。。 スタックサイズを知る方法はあるのでしょうか? また、なぜ暴走するのでしょうか?

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

論理的な制限はありません。ですから当然定義もありません。 制限があるとすればメモリ空間などの物理的な制限です。 ちなみにこれは、unixに限った話ではありません。

Nao7987
質問者

お礼

早速の回答ありがとうございました。

Nao7987
質問者

補足

では、パラメータとして引き渡す際には変数サイズの制限があるのでしょうか? また、メモリ空間の制限についてはどのように確認すればよいのでしょうか?

関連するQ&A