anonymous@RULINUX.NET~# Last login: 2024-12-26 09:55:55
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Re:[linux][malloc]

http://www.win.tue.nl/~aeb/linux/lk/lk-9.html

Normally, a user-space program reserves (virtual) memory by calling malloc(). If the return value is NULL, the program knows that no more memory is available, and can do something appropriate. Most programs will print an error message and exit, some first need to clean up lockfiles or so, and some smarter programs can do garbage collection, or adapt the computation to the amount of available memory. This is life under Unix, and all is well.

Linux on the other hand is seriously broken. It will by default answer "yes" to most requests for memory, in the hope that programs ask for more than they actually need. If the hope is fulfilled Linux can run more programs in the same memory, or can run a program that requires more virtual memory than is available. And if not then very bad things happen.

anonymous(*) (2009-06-23 17:56:22)

Mozilla/5.0 (Konqueror/4.2; Linux 2.6.28) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3)

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: Re:[linux][malloc] от anonymous 2009-06-23 17:56:22
avatar
Скрыть

[linux][malloc]

http://netsago.org/ru/docs/1/14/

> В спецификации C указано, что malloc должна вернуть NULL в случае, если памяти недостаточно, чтобы удовлетворить запрос. Linux не полностью следует этому правилу: он возвращает NULL, если в системе нет достаточного виртуального пространства адресов, чтобы выполнить выделение памяти, но в случае недостатка памяти, Linux по-прежнему выделяет пространство адресов, а затем возвращает ошибку, если вы пытаетесь использовать эту память.

Что, правда???

anonymous(*)(2009-06-23 17:56:22)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.21) Gecko/20090328 Fedora/1.1.15-3.fc10 SeaMonkey/1.1.15
[#] [Добавить метку] [Редактировать] Ответ на: Re:[linux][malloc] от anonymous 2009-06-23 17:56:22
avatar
Скрыть

Re:[linux][malloc]

Что-то похожее действительно наблюдается. Оптимистичным выделением памяти называется, если я ничего не путаю.

anonymous(*)(2009-06-23 19:47:26)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.5) Gecko/2009020103 Gentoo Firefox/3.0.5
[#] [Добавить метку] [Редактировать] Ответ на: Re:[linux][malloc] от anonymous 2009-06-23 17:56:22
avatar
Скрыть

Re:[linux][malloc]

проверки нужны всегда и везде, а поведение malloc регулируется /proc/sys/vm/overcommit_memory

progman(*)(2009-06-24 10:47:51)

Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.10 (like Gecko) (Debian)
[#] [Добавить метку] [Редактировать] Ответ на: Re:[linux][malloc] от anonymous 2009-06-23 17:56:22
avatar
Скрыть

Re:[linux][malloc]

Зашибись! Просто классно! Выделяешь память, проверил, что она не NULL, потом memcpy и на тебе – Segmentation fault на ровном месте.

Получается проверка

    if (p=malloc(n)) != NULL
нафиг не нужна?

Поддерживаю, Линукс действительно broken в этом месте, не смотря на все преимущества данного оптимистичного подхода к распределению памяти.

anonymous(*)(2009-06-24 10:17:14)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.21) Gecko/20090328 Fedora/1.1.15-3.fc10 SeaMonkey/1.1.15
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!