※ ChatGPTを利用し、要約された質問です(原文:c++ 構造体がメモリを食いすぎている?)
C++構造体のメモリ消費量についての疑問
このQ&Aのポイント
C++の構造体を使用しているプログラムで、メモリ消費量の問題が発生しています。具体的な環境やプログラムの一部を示し、現象を説明しています。
実行時に異常終了が発生している場合や、コンパイルエラーが発生していないにも関わらずプログラムが正常に実行されない場合があることについて言及しています。
MAXの値を変更することで異常終了の発生有無が変わることを確認しており、メモリ消費量が原因である可能性があることを示唆しています。
始めに環境を書いておきます。
1台目
OS:winXP Pro
RAM:768MB
コンパイラ:borland c++ compiler 5.5
2台目
OS:win7
RAM:3GB
コンパイラ:vc++ 2008
プログラムの冒頭部分だけ書き出します
------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
typedef struct{
________char author[128];
________char title[MAX/4][128];
________int valuation[MAX/4];
________char path[MAX/4][512];
________int sigData; //有効な(タイトルの)データ数
}FolderInfo;
------------------------------------------------
このままだとコンパイラではエラーを吐かないですが、
実際に実行してみると、異常終了してしまいます。(2台目)
また、1台目は異常終了の表示は出ないのですが、main関数すら通りません。
-----------------------
int main(void)
{
________printf("check");
-----------------------
のようにprintfを入れてみたのですが表示されませんでした。
1台目のborland turb debugger?でデバッグしてみると
「Not enough memory to load symbol table」
といきなり出てきます。symbol tableは検索では出てきますし、わかるような気もするのですが、何故このようなメッセージが出てくるのかが判りません。
また、
#define MAX 100
を
#define MAX 10
とすると異常終了を起こさずに、普通に実行されます。(これは1台目、2台目ともに)
なので、メモリが足りないのかと思ったのですが・・・
そんなに消費するものでしょうか?
お礼
mallocを使って、試したところ期待通りの動作をしました。 メモリなどを扱うようなプログラミングはあまりしたことがなく、なぜmalloc関数があるの?などと疑問に思っていました。 今回、このような問題に直面して初めてこの関数の、またメモリの確保というのが大事だということがわかりました。 非常に勉強になりました。 ありがとうございました。