• 締切済み

汎用機COBOLのメモリ管理について

maiko04の回答

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.5

メインのリンケージエリアは実メモリーではありません。 サブプログラムにあるデータエリアを指しています。 >300件以内の場合で~ 300件以内の場合はサブを呼びませんからサブの1100のメモリーは ありません。 1100番目の項目はプログラム内か、はたまた別のプログラム内かの アドレスを指しています。 >記憶保護例外等の異常終了はしません これはコンパイラーやOSが判定していなければ起こりえません。 0番目であってもアクセスはできます。 読み込みに問題は出ません。 書き換えてみてください。どこかがおかしくなりますからw。(超危険)

ada1872jp
質問者

補足

度々の回答、ありがとうございます。 通常、リンケージエリアはサブPG側に設定されると思いますが、今回の場合、親PG側にリンケージエリアが設定されていますので、サブPGは無関係なのではないかと思います。オンラインPGなので、オンラインPG間でデータの受渡をするSPAの領域がリンクの相手先と考えられます。アドレスを設定しない状態で、いきなりデータの転送をしても何の問題も起きていません。普通に書込みと読出しができています。なので、書込みをした時点で、おそらくSPAにメモリが取られているのではないかと思いますが、IF文とか計算処理による参照のみとかの場合は、ちょっと判りませんが、そこの所の確認ができればと思っています。

関連するQ&A

  • COBOL・全角判定

    以前こちらで質問したものです。 http://oshiete1.goo.ne.jp/qa2553484.html 例題を参考に詳細設計書を作成中ですが、 お客様の要望で「漢字項目は前後に漢字制御コード(前に‘0A42’後に‘0A41’)を付加する」というのがあり、わからなくなってしまい質問です。 漢字項目もX(40)というようにCOPY句で設定されています。 どの項目が漢字項目なのかは資料をいただいてわかっています。 例題をもとにすると IF DATA-AREA NOT = ' '   PERFORM TEST BEFORE VARYING I FROM DATA-LEN BY -1       UNTIL (I < 1) OR (DATA-AREA(I:1) NOT = ' ')       CONTINUE    END-PERFORM 【1】    MOVE I TO DATA-LEN    STRING DATA-AREA ','      DELIMITED SIZE      INTO OUT-REC      WITH POINTER DATA-POS    END-STRING 【1】にIF文でデータが全角かどうか判定するのだと思うのですが どう判定したらよいのでしょうか。マニュアルをみたのですが探せませんでした。またもし全角データだった場合STRINGはどのように記入すればよいのでしょうか。

  • メモリの増加に関して

    static 変数にて 大きな配列を取得し、その配列の任意の位置(サンプルでは4k毎) に値を入れた場合、 タスクマネージャのプロセスでメモリ使用量を確認した場合、ステップ実行毎にメモリが増えて行くように見受けられます。 本来C言語なら 実行時にリニアにメモリを取得するとの認識ですが、拡張子がcpp だからか、windows環境だからなのか? 色々と理解できません。 また、4k毎と記載しておりますが、どうも4k毎にメモリを取得しているように見受けられるためにその様に記載いたしました。 しかしメモリダンプで見た場合、リニアに見えていることを考慮すると。 空間的には指定のサイズ分リニアなメモリを用意する(他のメモリとはオーバーラップしない) 使用時に実使用メモリとして管理(カウント)する。 等の動きをしているのでしょうか? メモリダンプでアドレスをずらしながら確認すると使用メモリの増加が確認できております。 ファイル拡張子をcに変更して、プリプロセッサの設定を変更しても同じ現象の確認が取れました。 大きなメモリを使うのだからmallocを、、、は 今回は無しでお願いします。 純粋になぜこのような動きになっているかを知りたいと思っております。 よろしくお願いします。 OS XP SP3 開発環境 VC2005 ファイル拡張子 cpp コンソールアプリ /***************************************/ #include "stdafx.h" #define WORK_STATIC_MOMOERY_SZ ( 10 * 1024 * 1024 ) static char work_static_momory[WORK_STATIC_MOMOERY_SZ]; int _tmain(int argc, _TCHAR* argv[]) { work_static_momory[0] = 0x12; work_static_momory[ 4 * 1024 ] = 0x12; work_static_momory[ 8 * 1024 ] = 0x12; work_static_momory[12 * 1024 ] = 0x12; work_static_momory[16 * 1024 ] = 0x12; return 0; }

  • ファイルから構造体へデータを格納(動的メモリ割り当て)

    C言語の勉強をしいております。 typedef struct address { char names[32]; /* 名前 */ char tels[32]; /* 電話番号 */ struct address *prev; /* 前のリスト */ struct address *next; /* 次のリスト */ }Address; という構造体へ、ファイルから読み込んだテキストデータ(名前と電話番号がTABで区切られている)を格納したいのですが、配列ではなく、動的にメモリを確保しながら格納する方法を教えていただけないでしょうか? 処理の流れとしては、 ・1つめの構造体の*prevにはnullを入れておく。 ・1つめの構造体へファイルの1件目のデータを格納する。 ・ファイルのデータがまだある場合には、malloc関数を使ってメモリを確保し、malloc関数からの戻り値を1つめの構造体の*nextへ格納する。 ・構造体へ2件目のデータを格納する。 このような感じだろうという程度しか分からず、ソースも書けずにいます・・・。 配列を使用したサンプルはあるんですが、動的に処理を行う方法を教えていただけないでしょうか? よろしくお願いいたします。

  • COBOL97,Power-COBOLでの効率の良い書き方

    汎用機のCOBOLでは添字にはCOMP-1を使うと効率が良いとか、ベースレジスタ削減のために 01レベルのワーク領域の数を減らす(少数の01レベルの配下にワーク領域を定義する)などがマニュアルに記載されていました。 ところがパソコン/サーバ上で動くCOBOLの場合は、計算用にCOMP-3を使うと処理効率が悪い、計算用ではCOMP-3よりはDISPLAY項目、さらに良いのはCOMP-5である、などと言う記事もあり汎用機COBOLとはずいぶん違うようです。実際のところ、パソコン/サーバ上で動くCOBOLで実行時の効率が良いプログラムを書くためには、どのような事に注意すれば良いのでしょうか?

  • メモリについて

    私の使用しているPCはメモリソケットが4ケ付いています。 そこで、質問なのですが、512Mのメモリ4枚装着した場合と1GBのメモリ2枚の場合と、処理能力に差が出ますか? メモリの枚数によって処理能力に差が出る事はあるのですか? お解りになる方教えて下さい。

  • COBOLの動的SQLについて

    COBOLにおいて、動的にSQLを組みたいのですが、 取得する方法も含めてご教授願いませんでしょうか? 例) 条件により コード=1の場合、 SELECT A.ID,B.NAME FROM ID A,NAME B コード=2の場合、 SELECT A.ID,B.NAME,C.ADDRESS FROM ID A,NAME B,ADDRESS C のように条件により取得する項目も数もテーブルも違います。 この場合でのSQLの組み方とデータを取得する(FETCHの方法)がわかりません。 また、取得する件数も1件ではありません。 よろしくお願い致します。

  • メモリの4枚使用について

    PCのメモリは同じものを2つ使用したほうがいいと聞いたのですが、 スロットを4つ使う場合は4つとも同じメモリがいいのでしょうか? それとも同じのを2枚2セットで使ってもいいのでしょうか? どなたかご教授願います。

  • realloc関数でメモリエラー

    いつもお世話になります。 今、Microsoft VS 6.0 でrealloc関数を使用したプログラムを作成した所、 メモリエラーが発生してしまいました。 どうも、調査を行なっていくと、realloc関数を何回か使用していくと、 別のメモリ領域を破壊(?)しているように思えます。 そのような現象って、他の方々も発生した事があるのでしょうか?? それとも何か落とし穴が??? どなたか情報をもっている方、是非是非お願いします。 ちなみに、reallocを使用せず、malloc関数のみで作成したプログラムでは 発生してません。 ---------------- 【reallocを使用していて作成した関数】   ファイルを読み込み、1件読むたびにrealloc関数でエリア拡張    (最初の1件目はmalloc関数にてエリア確保、2件目以降realloc使用) 【原因】   ポインタ変数の内容(アドレス値)が変更されている事が発覚      →おかしくなったエリアを参照しようとしてメモリエラーが発生       ↓   変更された個所を選定していくと、   「realloc」関数を使用後変更されている事が発覚      ※変更されていたポインタ変数は、「realloc」関数使用時には       全く参照もしていない変数で、ロジック上値を変更するような事は       なかった       ↓   「realloc」関数を使用すると常に発生しているわけではない事は確認済     (たまに発生 ←メモリ領域へのアロケートなので取得するエリアによって発生すると推測)       ↓   同様のロジックを予め件数を数えた後、   「malloc」関数を使用すると発生しない事は確認済

  • パソコンのメモリのこと教えて下さい!

    「メモリは多ければ多いほど処理能力が向上することになります。」と書いてあるのを読んだのですが、これは間違いではないのでしょうか?使用するOSやアプリケーションによって必要なメモリが足らない場合は、スワップして処理能力が落ちてしまいますが、必要以上にメモリを増やしても処理能力は向上しないですよね。 どう思われますか?教えてください。

  • メモリについて

    パソコンのカタログでメモリ256MB(最大2GB)と言う表示があります。どういう意味でしょうか? 初心者にわかりやすく教えて頂けると嬉しいです。 富士通の冬モデルのパソコンにビデオメモリという項目があり、その数字が大きいほど映像処理が早いと聞きました。 富士通の春モデルのカタログにはビデオメモリの項目がありません。 これはどおいう事ですか? ニューモデルにはビデオメモリが無いのですか? デジタルビデオの編集をメインの使用目的にパソコンを買いたいと考えています。 なるべく動画編集ソフトが速く動くものがいいです。 例えば富士通の冬モデルのNX90J/Tと春モデルのNX90KTを比較した場合メインメモリが同じでCPUも同じなので単純比較ではビデオメモリのある冬モデルのNX90J/Tの方が動画編集ソフトの動作が速いと考えていいのでしょうか? メモリ増設などの手を加えないで市販状態のパソコンで使用したいです。 動画編集ソフトが速く動くパソコンの選び方でCPUとメモリ以外で何か有りましたら教えて下さい。