自分のwindows10 64bit環境でmallocしてその返り値を確認したところ、
int* aaa = (int*)malloc(sizeof(int)); int* bbb = (int*)malloc(sizeof(int)); printf("aaa:%p \n", aaa); // out: aaa:0x7fffb83392a0 printf("bbb:%p \n", bbb); // out: bbb:0x7fffb83392c0 (差20)
のように常に20byte(訂正: 32byte)の刻みとなっております。
素人目線ではintで確保したのだから8byte間隔になるのが普通なのではないかと考えてしまいます。
ちなみにcharでも、unsigned long long intでも同じ20間隔となりました。
バラバラのヒープ領域に確保されるという仕様であれば仕方ないかとも考えましたが、
ポインタの配列を使用した際にも、20の差で確保されております。
配列はアドレスが隣り合った連続ではいけないと思いますのでこれではまずいのではないでしょうか...
int* arry[3]; for (int i=0; i<3; i++){ arry[i] = (int*)malloc(sizeof(int)); *arry[i] = i; /* 下はそれぞれ要素間が20 */ printf("*arr[i]p: %p\n", *(arry + i); }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/31 05:42