ふと思ったのですが、
「ポインタに入るアドレスの値がそのポインタ型の最大値を超えたら、オーバーフローが起こるのでは??」
と・・・
確認プログラムを作成してみました。
C
1#include<stdio.h> 2 3int main() { 4 char h = 1000; // わざと 5 int n = 255; 6 long m = 4294967295; 7 printf("%d\n", h); 8 printf("char : 255 = 0x%x\n", n); 9 printf("unsigned int : 4,294,967,295 = 0x%x\n", m); 10 11 int i = 90; 12 13 char a = 'A'; 14 char *p = &a; 15 printf("&a : 0x%p, sizeof(char *) = %d Bytes, sizeof(int *) = %d Bytes\n", p, sizeof(char *), sizeof(int *)); 16 return 0; 17} 18
結果は以下のようになりました。
**-24
char : 255 = 0xff
unsigned int : 4,294,967,295 = 0xffffffff
&a : 0x0060FABF, sizeof(char ) = 4 Bytes, sizeof(int ) = 4 Bytes
int * を例に取ります。
大きさは4Byteなので 0x00000000 ~ 0xffffffff までのアドレスなら格納できることになるはずです。
以下のようなものを見つけました。
リンク内容
32bit OSなら、4GBまでなのでこれでも問題なさそうですが、64bitになるとアドレス空間が大きくなります。
例えば、メインメモリを32GB(8GB x 4スロット)積んでいたとします。
以前も質問をしたのですが、(リンク内容)1つのアプリケーションで、10億個の配列を使用した場合、12x10^9になるので、メモリは12GB搭載していないと動かない・・・ということになると思います。
これって、0xffffffff を超えるようなアドレスの値を int * に入れ込むと、オーバーフローになりませんか??
これ、やばいような気がするんですが・・・実際はどうなっているのですか??
教えてください。
[追記]
環境を追記しますね。
windows 64bit
ファイル拡張子 .c です。
visual studioでコンパイルしてみました。

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/23 10:11
2017/01/23 10:14
2017/01/23 10:15
2017/01/23 10:31