Почитал комментарии и очень удивлен. Я один считаю, что секретный вопрос не должен иметь ничего общего с ответом? В смысле, что ответ на «девичья фамилия матери» никак не эта самая фамилия, а что-либо другое.
Почему неизвестно? Памяти должно быть достаточно для создания bad_alloc и все. И конечно же обработка такого исключения не должна приводить к очередной попытке выделения памяти, зато можно попытаться ее освободить. И естественно, что резервирование осуществляется при запуске, а не в момент нехватки памяти.
Какой смысл было бы вводить исключения, если его нельзя будет поймать и обработать? Ведь это затем и придумано. И еще раз повторяю, что там сидят не дураки, а опытные программисты.
В реальной жизни к приложениям бывают разные требования. Иногда одно из них — устойчивость к ошибкам. Пусть не получится выполнить нужную функцию из-за нехватки памяти, но падать при этом нельзя.
Компилятор обязан это сделать, это требование стандарта языка C++. Ведь в комитете стандартизации не дураки сидят и понимают, что для генерации исключения требуется память.
> ибо кинуть исключение это создать объект, а где его создать когда память закончилась?
Компилятор обязан резервировать память, чтобы ее хватило на такое исключение. И нехватка памяти совершенно нормальная ситуация, с которой сталкивается каждый программист, пишущий что-то более-менее сложное.
Если память можно докупить, то точно также можно докупить и сервера. Так зачем вообще заботиться об эффективности и использовать компилируемый язык? :-)
А имеет ли смысл использование подобного кода в языке C учитывая, что там нет деструкторов? Ведь мы получим утечки ресурсов, а это не всегда допустимо.
Ведь rps зависит от машины, на которой запускается тест. У автора все-таки Celeron. На моей машине (AMD Phenom X4 940) этот пример выдает 12000 rps, что почти соответствует указанной разнице в 2-3 раза в сравнении с программой на C или C++ (моя программка на C++ выдает 28000 rps, как и nginx). В общем не так много, как хотелось бы, но и не так уж мало.
Помимо мобильной версии можно воспользоваться расширениями вроде iReader или Readability. Но конечно изобретение велосипедов повышает опыт и самообразование :-)
> Вам для справки: такие конструкции — это K&R C; начиная с C89 типы
> переменных указываются в списке параметров функции.
Это я знаю. Но я говорю о своих первых впечатлениях о языке C. Не смотря на С89 указанный код корректен до сих пор и даже встречается в исходниках. Вот например из очень неплохой библиотеки discount:
/* helper function for php markdown extra footnotes; allow the user to
* define a prefix tag instead of just `fn`
*/
static char *
p_or_nothing(p)
MMIOT *p;
{
return p->ref_prefix ? p->ref_prefix : "fn";
}
Ну и на самом то деле, разумеется я не испытываю никакой ненависти по отношению к языку C. Это был ответ на пост, да и не ожидал я вообще инвайта. Просто проснулся в 3 утра и захотелось что-нибудь почитать, а потом и написать. Хоть сам на C практически пишу, зато постоянно использую libc или библиотеки написанные на C :-)
По моему, вполне нормально работает. Чуть медленее, чем на реальной машине. Но это больше заметно при использовании VC2010. А VC6 летает. Распараллеливать сборку она все равно не умеет, поэтому IO APIC отключен и доступен только один процессор. Если включить IO APIC, будет чуть хуже.
Какой смысл было бы вводить исключения, если его нельзя будет поймать и обработать? Ведь это затем и придумано. И еще раз повторяю, что там сидят не дураки, а опытные программисты.
В реальной жизни к приложениям бывают разные требования. Иногда одно из них — устойчивость к ошибкам. Пусть не получится выполнить нужную функцию из-за нехватки памяти, но падать при этом нельзя.
Компилятор обязан резервировать память, чтобы ее хватило на такое исключение. И нехватка памяти совершенно нормальная ситуация, с которой сталкивается каждый программист, пишущий что-то более-менее сложное.
дает 12337.72 запр/сек, а вот такое:
грузит на 50% все мои 4 ядра и дает всего 3821.04 запр/сек.
Видимо с параллельностью там все еще не так хорошо, как хотелось бы.
Практические НЕ пишу
> переменных указываются в списке параметров функции.
Это я знаю. Но я говорю о своих первых впечатлениях о языке C. Не смотря на С89 указанный код корректен до сих пор и даже встречается в исходниках. Вот например из очень неплохой библиотеки discount:
Ну и на самом то деле, разумеется я не испытываю никакой ненависти по отношению к языку C. Это был ответ на пост, да и не ожидал я вообще инвайта. Просто проснулся в 3 утра и захотелось что-нибудь почитать, а потом и написать. Хоть сам на C практически пишу, зато постоянно использую libc или библиотеки написанные на C :-)