C: пределы выделения - PullRequest
       0

C: пределы выделения

1 голос
/ 10 апреля 2011

Я пытаюсь выделить ~ 1 ГБ, но когда я проверяю адрес указателя, это отрицательное число. Может ли это быть пределом конфигурации, который я бью где-то?

  • цель выделить ~ 1ГБ
  • предел ~ 0,7 ГБ ([структура] 48 * 16890)
  • 1,5 ГБ свободной памяти
  • до этого не было выделено большого количества памяти.
  • с использованием Fedora Linux.
  • без ошибок компилятора

Ответы [ 2 ]

7 голосов
/ 10 апреля 2011

Не проверяйте указатель на «знак», это не имеет значения. Единственный недействительный указатель, который вернет malloc, - это нулевой указатель. Если он вернул что-то еще, вы можете использовать его.

1 голос
/ 10 апреля 2011

но когда я проверяю адрес указателя, это отрицательное число

Это невозможно. То, что вы можете увидеть, это интерпретация адреса как целого числа со знаком.

В самом C нет ограничений. Выделения ограничены типом данных, используемым для запрашиваемого размера блока, и возможностями адресации операционной системы.

Во время выполнения запрос не будет выполнен (malloc() возвращает NULL), если не будет непрерывного блока свободной памяти запрошенного размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...