ユーザー空間プログラムの「データ」ポインターは、アドレス 0 および 0xffffffff から安全な距離にあると期待できますか? そのため、オーバーフローをチェックせずにポインターに小さなオフセットを安全に追加できますか? p が定数文字バッファーまたは動的に割り当てられた文字列 (最新の 32 ビット以上のオペレーティング システム) への char ポインターである場合、p + n がオーバーフローしないと安全に想定できる最大の正の n は何ですか?
混乱を避けるために:オーバーフロー チェックについて話しているのであって、境界チェックについてではありません。例: m 文字の文字列の先頭へのポインター p があり、正のオフセット i で文字にアクセスする場合、i < m を確認するか、間接的に p + i < を確認する必要があります。 p + m。ただし、後者の場合、p + i がオーバーフローしないことも確認する必要があります。つまり、p + i >= p であることを確認する必要があります。
更新: OK、p + i が実際に逆参照されているかどうか、またはオーバーフローしているかどうかに関係なく、i > m の場合、p + i は有効な標準 C ではありません。しかし、私が本当に興味を持っている問題は、実際には p + n がオーバーフローしない小さな n があるかどうかです。この質問に答えるには、最新のオペレーティング システムがアドレス空間をどのように編成しているかについて、ある程度の知識が必要です。
Update2: たとえそれが一般化できないとしても、特定の 1 つのプラットフォームについて聞くことはすでに非常に興味深いことです。できれば、あいまいな組み込みのものではないことをお勧めします。x86 または Power ベースの 32 ビット Win、Linux、および Mac が最も興味深いでしょう。