
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
callocの処理速度
-
128ビット変数の符合表現について
-
VB6からVCで作成したDLLへのvoi...
-
ヒープ領域の限界値設定
-
x64環境で連続4GB以上のメモリ...
-
reallocについて
-
仮想領域にウインドウを描画
-
C++で、メンバもヒープに確保さ...
-
GDI+におけるメモリの開放について
-
C++とC#って何が違うのですか?
-
C++ 構造体のnew
-
HEAP に関すること
-
DLLで同じメモリ領域を参照する...
-
入れ子になった構造体について
-
malloc メモリリークについて
-
C言語 配列の長さの上限
-
WSH(VBS)でJSONの文字列を読み...
-
C++ メンバイニシャライザリス...
-
プログラミング言語の変数と数...
-
コンストラクタ内での動的メモ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
allocってなんですか?
-
C++のnewで確保したメモリーの...
-
newしないオブジェクトについて
-
c言語のポインタへの文字列入力...
-
プログラムが途中で強制終了し...
-
Win32APIでのメモリ管理について
-
グローバル変数のサイズ
-
ヒープメモリの解放について
-
stringの最大サイズ
-
Accessで、メモリを開放するタ...
-
入れ子になった構造体について
-
void*型のデータサイズ
-
DLLで同じメモリ領域を参照する...
-
callocの処理速度
-
mallocで確保するメモリの領域...
-
ビットをローテートするプログ...
-
DLLのマルチスレッドの動作につ...
-
C++で、メンバもヒープに確保さ...
-
LoadLibraryでAccess Violation...
-
配列の添え字の最大数とは?
おすすめ情報