|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.12.2016, 16:52 | #21 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Система Ubuntu 16.04. Код: Код:
Получаем exception. При vm.overcommit_memory = 1 система тупо убивает процесс. Получаем killed. Вот такая вот теория и не реальная система. Волшебство ближе чем Вы думали, да? Последний раз редактировалось Croessmah; 10.12.2016 в 17:08. |
|
10.12.2016, 17:12 | #22 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
И вот видео с результатом: https://youtu.be/8cM2kNbFcNg
Надеюсь, я донес до вас, что реалии именно такие, как я и написал - оно может упасть в момент обращения. В нашем случае роль сыграла политика overcommit_always. Всего лишь одна циферка в параметрах системы убила приложение, вместо ожидаемого вылета исключения из new-expression. Думаю, на этом спор окончен. Пойду ставить политику как было. Последний раз редактировалось Croessmah; 10.12.2016 в 17:23. |
10.12.2016, 18:43 | #23 | ||
Заблокирован
Регистрация: 29.11.2016
Сообщений: 215
|
Даже смотреть не стал ... не интересно, потому что логика происходящего и так понятна.
Цитата:
Можно ещё поиграться с распределителем памяти в ядре, например, ... поменять slub-алокатор на slab-алокатор, а затем на slob-алокатор ... и с огромным интересом наблюдать что там происходит. Вот что пишут в обсуждениях в документации Linux ... по поводу политики: Цитата:
Спор здесь и не интересен, и неуместен. Меня, лично, во всём этом интересуют вовсе не академические и высоко научные обсуждения ... и уж тем более, не всякие "глубинные аспекты", выдумываемые ВУЗ-овскими пЫдагогами для задрачивания студентов, а исключительно (для себя) то, можно ли в реальных проектах контролировать успешность выделения памяти. Последний раз редактировалось olej.tsil; 10.12.2016 в 18:46. |
||
10.12.2016, 19:11 | #24 |
юзер как все
Участник клуба
Регистрация: 10.01.2012
Сообщений: 1,586
|
После это фразы, дамаю с тобой вообще не о чем больше говорить!
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
|
10.12.2016, 19:35 | #25 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Цитата:
Если ОС подсовывает мусор приложение мало что может сделать. new либо выделяет память, либо бросает exception, либо возвращает 0. Мне, кроме всего прочего, интересно как это все работает - ведь new/malloc сами обращаются к выделенному блоку - почему не вылетает тогда? Последний раз редактировалось waleri; 10.12.2016 в 19:38. |
|
10.12.2016, 19:39 | #26 |
Заблокирован
Регистрация: 29.11.2016
Сообщений: 215
|
|
10.12.2016, 19:43 | #27 | |
Заблокирован
Регистрация: 29.11.2016
Сообщений: 215
|
Цитата:
А политики выделения памяти (если ними играться) как-раз к malloc() и относятся, и он точно так же будет вылетать. Естественно, что new никакого выделения памяти вообще не производит, он а). сначала вызывает именно malloc(), а затем б). в выделенной в п.а памяти выполняет конструктор объекта. |
|
10.12.2016, 20:16 | #28 | ||||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
внутри new-expression никакого обращения к этой памяти не происходит. Цитата:
Цитата:
Код:
Код:
Как устроен new-expression зависит от реализации, но new-expression по стандарту использует operator new, и operator new[], а не malloc. А как устроены operator new/operator new[] - фактор совершенно монописуальный. Цитата:
|
||||
10.12.2016, 20:27 | #29 |
Заблокирован
Регистрация: 29.11.2016
Сообщений: 215
|
Да, но именно поэтому стандарт и говорит, что new не обязан возвращать NULL, и дефаултные реализации этого и не делают, и на это никогда нельзя рассчитывать.
Вот C-шные API: malloc(), calloc() etc., в противоположность, обязаны возвращать NULL при невозможности выделить память. |
10.12.2016, 20:31 | #30 | ||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Код:
Код:
Цитата:
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
массив Указатель на указатель | fr0st1k123 | Общие вопросы C/C++ | 3 | 27.12.2015 18:06 |
нужно написать программу в с++. определить длину строки и определить сколько раз встречается буква П в строке. | chit | Помощь студентам | 4 | 11.07.2015 14:03 |
Передать указатель на указатель в функцию | erro | Общие вопросы C/C++ | 3 | 29.10.2012 17:59 |
Определить сколько знаков в числе, вычислить сумму цифр и определить старшую цифру | Blombox | Помощь студентам | 5 | 25.04.2011 15:52 |
Среди 20 введёных чисел определить чётные, распечатать их, определить min | Spade | Помощь студентам | 4 | 15.06.2008 18:39 |