私はmallocでいくつかの実験を行っていて、Linux m/cでこの非常に小さなプログラムを作成しました。
int main(){
int *p=NULL;
p = (int *)malloc(10);
*(p + 33*1000) = 5;
free(p);
return 0;
}
このプログラムはセグメンテーション違反を引き起こしていませんが、5行目をこれに変更すると*(p + 34 * 1000)= 5; 次に、セグメンテーション違反が発生します。私のシステムでは、ページサイズは4Kです。
pの後に約128Kb(34 * 1000は約128K)でセグメンテーション違反が発生する理由を説明できません。
誰かがLinuxのメモリ管理の観点からこれを説明できれば、それは素晴らしいことです。