• ベストアンサー

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

  • 構造体と構造体型の変数宣言箇所

    はじめてborlandC++builder6でプログラムを作っているのですが、構造体と構造体型の変数宣言箇所についてわからないことがあるので質問させてください。 あるフォームのソースファイル(○○○.cpp)内の関数で、自分で定義した構造体を使う場合、ヘッダファイル(○○○.h)に構造体を定義すると、関数内で「変数が未定義」エラーになってしまいます。一方、ソースファイル(○○○.cpp)の先頭に書けばエラーになりません。  ヘッダファイルに変数定義した場合とソース内の先頭に構造体と構造体型変数を定義するのでは何が違ってくるのでしょうか?

  • 汎用性のある構造体

    c言語で構造体のメンバに関して構造体の定義を操作せずにメンバを操作したいのですが(ソースから)その実現は可能でしょうか? よろしくお願い致します

  • C言語のHP-UXからLinuxへのポーティング

    C言語で開発されたプログラムをHP-UXからLinuxへのポーティングする場合、どのように行えば効率的でしょうか? また、注意する内容があれば教えて頂けないでしょうか? ポーティング前のOSはHP-UX(詳細不明) ポーティング後のOSはRedHat Enterprise Linux 5.5 (64bit) C言語で開発されたプログラムは、ソケット通信でサーバ間通信を行う機能となります

  • FILE構造体がどのように定義されているか

    こんにちは。 C言語初心者です。 今、FILE構造体について学んでいるのですが、stdioでFALE構造体が どの用に定義されているか調べなさい、という問題がありました。 それは、どのように調べればいいのでしょうか。 また、どのように定義されているのでようか。

  • 構造体について

    プログラムを勉強し始めて3日目の初心者なんですが、構造体を使う意味がいまいちよくわかりません。 たとえば、構造体の定義が { 縦の長さ 横の長さ 重さ } だとしたら、それを使うためにも { 縦の長さ= a 横の長さ= b 重さ= c } と同じものを2回書く必要があり、なんだか冗長な感じがしてしまいます。 それとも、定義で決めたデータをわかりやすく、間違えないようにするためですか? 本当に未熟で仕組みや使い方もわからない自分の質問なのですが、答えていただければうれしいです。

  • 構造体変数がないとメンバ操作できないのはなぜ?

    C言語の構造体に関して質問がありますが、structで型を作成して、構造体変数にてメンバの代入・参照をする。ということなんですが、なんでメンバ操作には構造体変数からでないといけないのでしょうか? 直接、型枠にてメンバ操作をすれば良いのに、なぜ構造体変数から操作しないといけないのでしょうか? 「クラス」や「オブジェクト」みたいに、一々ゼロから作成したり、コピペで作成しなくても済むように、このような形になっているのでしょうか? 回答の方よろしくお願いします。

  • sqliteの構造体

    SQLiteを使ったメールソフトを作っています。 sqliteの構造体 sqlite3_stmt の宣言は見つかるのですが 構造体の内容の定義してあるものが見つかりません。 sqlite3.h, sqlite3.c を探したのですが見つかりませんでした。  この構造体が見つからないと そこに登録してある値が使えません。 それとも、 この構造体は定義されていなくて これを当てにしないで プログラムを組まなくてはいけないのでしょうか? 使わなくても動かせそうですか。。。 お分かりの方、よろしくお願いします。

  • 構造体の纏め方

    関数のポインタを使用して、 /* プロトタイプ宣言 */ void func1 ( void ); void func2 ( void ); void func3 ( void ); /*******************/ /* プロトタイプ纏める */ void ( *funcs[] ) ( void ) = { func1, func2, func3 }; /*********************/ と言うのが、構造体でも出来ないでしょうか?と言うのが質問です。 変数(添字)によって、見るべき構造体を自由に変更させたいと言うのが主な使用方法です。 typedef struct _tag { int arg1; int arg2; } tag; tag watch1 , watch2 , watch3; とある変数が1なら、watch1、とある変数が2なら、watch2、とある変数が3なら、watch3を見ると言うようなプログラムにしたくて、質問しました。 witch文を使うしかないのでしょうか? 良き回答、お待ちしています。

  • C言語の構造体のサイズについて

    いつもお世話になっていります。 早速ですが、C言語の構造体のサイズについて教えてください。 typedef struct B { short code; char name; float price; } B; typedef struct A { B bbb[10]; double sougaku; } A; A aaa; といった構造体があった場合に、 sizeof(aaa.bbb.code) + sizeof(aaa.bbb.name) + … + sizeof(aaa.sougaku) という風に一つ一つサイズを取得し、合計して構造体のサイズを取得した場合と sizeof(aaa) という風に構造体のサイズを取得した場合のサイズの値が異なるといった現象が起きます。 その原因が分からなくて困っております。 そこで考えられる要因をお教えください。 因みに実際の構造体はサイズで言えば2500バイトくらいあります。 froat/char/double/short 型を使用しております。 よろしくお願いします。

  • すみません。C言語の構造体で簡単なプログラムがあれば教えてください。

    すみません。C言語の構造体で簡単なプログラムがあれば教えてください。