Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2016, 20:52   #31
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Они ну никак не могли кинуть исключение, потому как в C их и нет.
Ну, в каком-то смысле и так ... то чего нет - того не может быть

Но, с другой стороны, в нормальных (! ) операционных системах они могли бы (могут?) "бросить" сигнал SIGSEGV, который вы можете перехватить, проанализировать ... и благополучно продолжить свои дела.
olej.tsil вне форума Ответить с цитированием
Старый 10.12.2016, 21:49   #32
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
В том-то и дело, что участок памяти не инициализируется
Ну, это вообще относится к частному случаю когда вы выделяете int... Если выделять любой мало-мальски смысленный объект то его конструктор наверняка обратится.

Далее, мне всегда казалось, что в реализации new используют malloc а malloc обычно обращается к памяти, ибо надо поддерживать список блоков.

Так почему это не ломается?
waleri на форуме Ответить с цитированием
Старый 10.12.2016, 23:53   #33
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Далее, мне всегда казалось, что в реализации new используют malloc а malloc обычно обращается к памяти, ибо надо поддерживать список блоков.

Так почему это не ломается?
Маллок выделяет кусок в виртуальном адресном пространстве. Физическая память привязывается к нему в момент первого обращения (это и называется commit). Обращение происходит к конкретному адресу (конкретной странице). Следовательно, теоретически операционная система может закоммитить только эту одну страницу, а не весь выделенный блок (хотя, конечно, для оптимизации обычно коммитят сразу несколько страниц - но, опять же, не весь блок целиком).

Потому конструктор/менеджер кучи может благополучно обратиться к части выделенной памяти, а код ниже - словить сегфолт при обращении к другой.
Son Of Pain вне форума Ответить с цитированием
Старый 11.12.2016, 00:02   #34
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Потому конструктор/менеджер кучи может благополучно обратиться к части выделенной памяти, а код ниже - словить сегфолт при обращении к другой.
А вот это из выше сказанного совершенно не следует, потому что если логическая страница не отображается на физическую, и нет свободых страниц физической памяти, то MMU элементарно выгружает самую ненужную страницу из любого другого процесса, и отдаёт эту страницу под запрос.
Отображение логических страниц в физические не имеет никакого отношения к генерации или нет ошибок о распределении, и само по себе ни при каких обстоятельствах не может быть причиной ошибки (это относится к адресному пространству пользователя, в адресном пространстве ядра, кольце защиты 0, там картина может быть другая ... но там и механизм распределения памяти совершенно другой).
olej.tsil вне форума Ответить с цитированием
Старый 11.12.2016, 00:37   #35
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от olej.tsil Посмотреть сообщение
А вот это из выше сказанного совершенно не следует, потому что если логическая страница не отображается на физическую, и нет свободых страниц физической памяти, то MMU элементарно выгружает самую ненужную страницу из любого другого процесса, и отдаёт эту страницу под запрос.
Отображение логических страниц в физические не имеет никакого отношения к генерации или нет ошибок о распределении, и само по себе ни при каких обстоятельствах не может быть причиной ошибки (это относится к адресному пространству пользователя, в адресном пространстве ядра, кольце защиты 0, там картина может быть другая ... но там и механизм распределения памяти совершенно другой).

ШТА? )
Очевидно, что если ОС может освободить память, выкинув что-то в своп - не будет ни эксепшна, ни сегфолта. Это прозрачный для приложения этап, который, в общем-то, не имеет отношения к обсуждаемому вопросу.

Мы же говорим о случае, когда ОС не смогла найти физическую страницу: своп либо выключен, либо настройки не позволяют свопить больше.
Son Of Pain вне форума Ответить с цитированием
Старый 11.12.2016, 00:45   #36
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
ШТА? )
А та
olej.tsil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив Указатель на указатель 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