確かに、多くの[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+1start+Nstartsizeof(*start)*N