2016-11-03 3 views
-4

サイズ1MBの配列を初期化します。だから私の目標は最終的に1MBをファイルに書き込むことです。 私はこの式を使用するたびに1MB未満のものを与えているのが不思議です。Cで正確な1MBの配列を書くには?

int len = (1048576)/sizeof(int); 
data = (int *) malloc(len); 

どのような正しい方法ですか? は


編集をありがとう - コメントを1として、私は、コードを変更しました。

mpicc -o a mpiFileSize.c 

./a > dump.dat 

の下に今私はdump.datのファイルサイズを確認するようにそれ、私はデータをダンプしようとしたコンパイルした後

#include <stdio.h> 
#include <stdlib.h> 
#include <mpi.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 
    int *data; 
    int bytes = (1024*1024); 
    data = (int *) malloc(bytes); 
    for(int i=0;i<bytes;i++){ 
    data[i] = (int)rand(); 
    printf("%d",data[i]); 
    } 
    return 0; 

} 

。 2.5MBの理由 File Size in Mac

+3

'malloc()'は割り当てるバイト数をとります。 'sizeof(int) 'で分割する必要はありません。 – kichik

+2

1つのMBをファイルに書き込むことが目標の場合は、なぜあなたは1 M​​Bのメモリが必要だと思いますか?たとえば、ファイルに1024 x 1024バイトを書き込むことができます(単純にループすればよいでしょう)。 – GhostCat

+1

プログラミング101:コードを書く前にマニュアルをお読みください。 102:SOの質問をする前にマニュアルをお読みください。 – user3528438

答えて

1

あなたが代わりに整数の文字を使用しshoulこの

#include <stdio.h> 
#include <stdlib.h> 
#include <mpi.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 
char *data; 
int bytes = (1024*1024); 
data = (char *) malloc(bytes); 
for(int i=0;i<bytes;i++){ 
data[i] = (char) rand(); 
printf("%c",data[i]); 
} 
return 0; 

} 

を試してみてください。

+0

はい1 MBのデータを生成します。 – irobo

+0

素晴らしい。あなたはその答えを受け入れることができますか? –

+0

なぜ整数ではないですか?その上の考え – irobo

関連する問題