2011-04-10 54 views
1

我想分配〜1GB,但是當我檢查指針地址時,它是一個負數。這可能是我在某處的配置限制嗎?C:分配限制

  • 目標分配〜0.7GB的〜1GB
  • 極限([結構] 48 * 16890)
  • 1.5GB自由存儲器
  • 沒有大量的內存是在此之前進行分配。
  • 使用fedora linux。
  • 沒有編譯器錯誤
+2

哈哈,你是認真的嗎?從不關心指針的「符號」,它不是一個整數。如果malloc()返回非零值,它就起作用了。 – 2011-04-10 18:48:35

+0

我很驚訝地聽到一個指針地址可以是一個負數 - 你必須在一個非常不尋常的硬件平臺上;-)雖然它當然可以*轉換爲*在任何平臺上簽名的int。 – 2011-04-10 18:49:13

+0

是的,你可以擴展你爲什麼認爲它不工作?指針是無符號的,如果malloc失敗,它將返回NULL。 – DanTheMan 2011-04-10 18:49:38

回答

7

不要測試指針的「標誌」,這是無關緊要的。 malloc將返回的唯一無效指針是空指針。如果它返回了其他內容,則可以使用它。

1

,但是當我檢查指針地址這是一個負數

那是不可能的。你可能會看到的是將地址解釋爲有符號整數。

C本身沒有嵌入的限制。分配受限於用於請求的塊大小和操作系統的尋址能力的數據類型。

如果沒有連續的所請求大小的空閒內存塊,則在運行期間,請求將失敗(malloc()返回NULL)。