No.4
- 回答日時:
>『char Data[1000][4096];』を使用しインデックスで、読出し,書込みを高速に行おうとしています。
このような使い方の場合、mallocを使用すると、検索に時間がかかってしまいそうな気がしますが、いい方法はないでしょうか?-------------------
この問題については、本来配列の添字による走査は便利ですが、ポインタによる配列の走査が速いと思います。
自分は下記のような配列の走査がよく使います:
/* put a NULL as a member of array , For judging pointer */
char *str[] = { "aaa". "bbb", NULL};
char **pointer = NULL;
pointer = str;
while(*pointer){/* 最後のNULLになったら終了 */
dosomething();/* 処理 */
pointer++;
}
なお、添字みたいなメンバーへアクセスするとき、pointer+nでアクセス可能だと思います。
もちろん、ポインタ使わず、配列だけ使っても結構です。
この回答への補足
早速の回答ありがとうございました。
私の補足質問に言葉か足らなかったようです。申し訳ありませんでした。
データが固定である場合、『char *str[] = { "aaa", "bbb", NULL};』も可能かと私も考えましたが、格納すべき入力データは、インデックスごとにどランダムに入力され、このデータを『char Data[1000][4096];』に格納しようとしています。また、扱うデータはバイナリデータです。
検索に多少時間がかかっても、mallocを使用した何らかのデータ構造を使用したほうがいいとゆうことででしょうか?
No.3
- 回答日時:
>『確実に保証される』とはどのようなことなのでしょうか?32767バイト以降は、処理中に破壊されてしまうのでしょうか?
標準Cの規格では、(正常に)コンパイル・実行できなければならない最低限の要件が「翻訳限界」として規定されています。その中に、1個のオブジェクトのバイト数として32767バイトが挙げられています。
ただし、これは最低限の要件なので、こうした制約がない方が望ましいともされています。しかし、32767バイトを超えるオブジェクトを宣言した場合、コンパイルできなかったり、実行時に誤動作しても致し方ありません。具体的にどんな振る舞いになるかはわかりません。
No.2
- 回答日時:
> Windows のプログラムでは、グローバル変数は最大どれくらい確保できるものなのでしょうか?
Windowsというよりは、コンパイラに依存します。
コンパイラに関係なく(といっても非標準処理系は除く)確実に保証されるのは、一つのオブジェクトあたり32767バイトまでです。
この回答への補足
回答ありがとうございました。
>コンパイラに関係なく(といっても非標準処理系は除く)確実に保証されるのは、
とありますが、『確実に保証される』とはどのようなことなのでしょうか?32767バイト以降は、処理中に破壊されてしまうのでしょうか?
No.1
- 回答日時:
こんにちは
まず、グローバル変数はなるべく使用しないほうがいいです。使用しざるを得ないときのみ使ってください。
多く使うとき、メモリの占用は多くなるし、プログラム終了までずっと独占されるわけです。
それから
char Data[1000][4096];
という定義のやり方はあまり薦めしません。
それは非常に大きい値であり、普通のやり方はポインタを使用し、最初適当にメモリを確保し(malloc)、あとは足りないとき動的に確保メモリサイズを変更する(realloc)のです。
mallocなどでメモリを確保し使い終わったらfree関数で解放することも忘れないように。
最大どのぐらい確保できるかという質問されると・・その方向であまり考えないようにしましょう。最小どのぐらいメモリの確保が必要なのかを自分に質問しましょう^^
この回答への補足
回答ありがとうございました。もう少し質問させてください。
『char Data[1000][4096];』を使用しインデックスで、読出し,書込みを高速に行おうとしています。このような使い方の場合、mallocを使用すると、検索に時間がかかってしまいそうな気がしますが、いい方法はないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 競技プログラミングに関する質問です。 3 2022/04/03 19:51
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- FTTH・光回線 グローバルIPアドレスの変更について 1 2022/04/23 05:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
入れ子になった構造体について
-
mallocについて
-
16進ダンプのプログラム
-
配列の添え字の最大数とは?
-
ヒープメモリの解放について
-
大容量の静的な確保の限界値
-
char*型が0x0を含む場合
-
HEAP に関すること
-
Accessで、メモリを開放するタ...
-
指定したメモリアドレスの値の...
-
ビットをローテートするプログ...
-
C言語 配列の長さの上限
-
関数から配列を返すには?
-
セグメントエラー
-
VBAのプログラムで、DIAG = 1# ...
-
VB.NETでファイル名順にファイ...
-
構造体とfscanf
-
fopne で失敗する原因
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mallocについて
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
ヒープメモリの解放について
-
C++で、メンバもヒープに確保さ...
-
MSDNがgethostbynameではなくge...
-
プログラムが途中で強制終了し...
-
配列の添え字の最大数とは?
-
Accessで、メモリを開放するタ...
-
malloc呼び出し時のセグメンテ...
-
ヒープ領域の限界値設定
-
スタック破壊の上手な見つけ方...
-
C言語 mallocとfreeについて
-
指定したメモリアドレスの値の...
-
stringの最大サイズ
-
16進ダンプのプログラム
-
入れ子になった構造体について
-
64ビットと32ビットの違い
-
free関数で動作が止まる
おすすめ情報