簡體   English   中英

在 C 中使用指針算法訪問數組的索引限制

[英]Index limit for access array with pointer arithmetic in C

我將一個指向 Python 中定義的大數組(數百萬行)的指針傳遞給帶有 ctypes 的 C 函數。

在 C 部分,我對該數組進行指針運算以訪問它的值。 現在我得到了一些奇怪/錯誤的計算,我認為這是因為指針算法。

據我了解,指針始終是整數,因此我可以訪問的數組的最后一個條目將是該特定系統的最大整數值。

那么如果我嘗試訪問 i 大於最大整數的*(array+i)會發生什么? 如果是這種情況,我如何訪問數組的剩余條目?

大多數現代操作系統使用平面內存模型,這意味着指針能夠表示虛擬地址空間中的任何地址。

在 64 位系統上,指針是 64 位,在 32 位系統上,它們是 32 位。

在32位操作系統上,每個進程的虛擬地址空間是2^32字節,也就是幾十億字節(即幾千兆字節)。

在 64 位操作系統上,每個進程的虛擬地址空間是 2^64 字節,這是一個天文數字。

那么如果我嘗試訪問 i 大於最大值 [指針] 的 *(array+i) 會發生什么?

在具有平面內存模型的系統上,您永遠不會遇到這種情況,因為指針總是足夠大以表示進程虛擬地址空間中的任何地址。

在具有分段內存模型的系統上,理論上可能會遇到這種情況。 但是,這肯定不是您遇到您描述的問題的原因。

據我了解,指針始終是整數,因此我可以訪問的數組的最后一個條目將是該特定系統的最大整數值。

您可以合法訪問的數組的最后一個元素取決於您為數組分配的內存量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM