なぜmallocを使ってsizeofを使うのですか?[定休日]
-
23-12-2019 - |
質問
使用の目的は何ですか sizeof
を使用して malloc
で C
?なぜその必要なのですか?
私たちは使うことができるということです sizeof
しかし、私たちはすでにメモリに割り当てているサイズ(=1000バイト)を知っていますか?
私はCの初心者です。これは非常に明白な質問かもしれません。
解決
データ型とメモリの問題
答えはデータ型にあります。あなたが知っている間 どのように多くのオブジェクト あなたはメモリを割り当てたい、あなたは精神的に彼らのサイズを計算するという問題を経験したくないかもしれません。
保守性もそうです
また、これらの構成が後で変更された場合はどうなりますか?それからあなたはねじ込まれ、すべてを編集する必要があります。
だから、あなたの例では、文脈なしでは無関係です。しかし、より複雑なもの(たとえば、いくつかのフィールドを持つ構造体)にメモリを割り当てたい場合、それは非常に重要で有用になります。
例1(ここではそれほど重要ではありません):
char *s = malloc(100 * sizeof(char));
がこんにちはをかけて食べるという習慣があり char
s、それは大丈夫です、あなたはそれを行うことができました:
char *s = malloc(100);
一般的に動作します。しかし、以下に示すように、足で自分自身を撮影します。
例2(すでに少し問題があります):
int *i = malloc(100 * sizeof(int));
確かに、あなたはそれを書くことができました:
int *i = malloc(100 * 4);
つまり、あなたがかなりよく知っている1つのアーキテクチャだけで開発すると仮定します。
例3(かなり重要になり始めています!):
typedef struct s_listelement{
int dataitem;
struct s_listelement *link;
} t_listelement;
t_listement *le = malloc(sizeof(t_listelement));
ここで、リンクリスト項目の構造に他のフィールドの束が含まれていると想像してみてください。..
あなたは信頼したいですか sizeof()
, 、または楽しみを持って行くと数学を自分で行いますか?
他のヒント
格納するためにメモリを割り当てるとします int
s.あなたの最初の推測は、大丈夫私が持っている必要があります n
整数と各整数が必要です x
バイト。したがって、スペースは次のようになります n*x
バイト。
しかし、実際にはこれは x
アーキテクチャに依存します。それは多分16ビット、32ビット、等。そのため、コードをさまざまな環境で動作させるには、次を使用することをお勧めします n*sizeof(int)
の代わりに n*x
.
たとえば、10個の整数にスペースを割り当てる必要がある場合:
int *p=malloc(sizeof(int)*10);
のサイズを変更するとどうなりますか mallocated
?
1)新しいサイズを再度計算する(複数のターゲットアーキテクチャの問題を脇に置いて、各ターゲットで新しいサイズを計算する必要があります)、2)すべ malloc(1000)
, 、それが参照していることを確認してください mallocated
(これは明らかではないかもしれません)と新しいサイズに置き換えます。
あなたはこれらの2つの問題のいずれかを使用していません sizeof
.このように使用して sizeof
より保守的で読みやすいコードにつながります。