確かに、多くの[start, end)
ペアアルゴリズムのエンドポイントでは、最後の有効なエントリを超えています。ただし、実装は決して逆参照 end
しないでください。実際にアクセスされる最後のエントリはである必要がありますend-1
。これは、有効な領域にあることが保証されています。アルゴリズムが逆参照する*end
場合はバグです。実際、有効なページの最後のバイトに意図的に領域を配置し、その直後に未割り当ての領域を配置するテストアロケータがあります。このようなアロケータでは、逆参照*end
するアルゴリズムが保護違反を引き起こします。
FLG_HEAP_PAGE_ALLOCS
ページヒープのデバッグをオンにします。これにより、割り当てや解放などの動的なヒープメモリ操作が検証され、ヒープエラーが検出されるとデバッガが中断します。
このオプションは、イメージファイルに設定されている場合はフルページヒープのデバッグを有効にし、システムレジストリまたはカーネルモードに設定されている場合は標準のページヒープのデバッグを有効にします。
イメージファイルにこのフラグを設定することは、コマンドラインでイメージファイルにgflags / p enable/fullと入力することと同じです。
ポインタオーバーフローの問題については、VAアドレス0xFFFFFFFFを含むページを割り当てるオペレーティングシステムはありません。同様に、0x00000000を含むページを割り当てるオペレーティングシステムはありません。このようなオーバーフローが発生するためには、のサイズは、有効な範囲の終わりに予約されたすべてのVAを飛び越える*start
のに十分な大きさである必要があります。start+1
ただし、そのような場合、割り当てられたアドレスは、最後の有効なVAアドレスより少なくとも1つ小さいサイズである必要があります。これはstart
、有効であることを意味します(に割り当てられている限り、以下も常に有効です)。start+1
start+N
start
sizeof(*start)*N