dimbor писал(а): ↑23.11.2012 22:30
И не надо так кричать. И так категорично. Тем более, что мое "Может и не оптимально" - предположение, крайне созвучное вашему утверждению.
если вам нужен сборщик мусора - сделайте себе кошерный сборщик мусора. Не вижу проблемы. Просто стек и куча это очень _разные_ памяти. Стек - небольшая и близкая, а куча - большая и медленная. В куче есть смысл хранить большое количество больших объектов, а в стеке - небольшое количество мелких. Проблема в том, что компилятор очень любит пихать временные данные в стек, и создатели CPU потому делают верхушку стека рядом с ALU. А если в стек засунуть что-то большое, то компилятор всё равно будет туда пихать, и это приведёт к тому, что часть данных будет далеко, и обращаться за ними будет очень дорого, но компилятор об этом не в курсе. К тому же, есть вероятность, что данные не влезут в стек, который по "славной" традиции C/C++ никто не проверяет. Это будет очень печально.
dimbor писал(а): ↑23.11.2012 22:30
Тем более, раз за alloca(), видимо, убивают мучительно. Ну значит придется от нее избавляться в той же макросной системе, которая тут обсуждается.
вот не надо утрировать! alloca() полезная и нужная штука, сколько раз говорить про гвозди и шурупы?! И макросы - хорошая штука. Но всё должно быть к месту.
dimbor писал(а): ↑23.11.2012 22:30
Я вообще-то уже все себе доказал лет -дцать как, молодой человек. А ответ на нескромный вопрос будет всего 12-13 в эрегированном состоянии.
за "молодой человек" - спасибо. Давно никто так не называл...
про "нескромные вопросы" - совсем не в тему. Проблема как раз в том, что куча
имеет свойство расширяться, а вот стек такого свойства НЕ имеет. Потому пихать данные в кучу сравнительно безопасно - если у вас слабая система, то вы вправе ожидать маленькие данные и маленькую кучу, если сильные, то и данные большие, но и куча тоже, к тому-же куча обычно "резиновая", когда туда большой массив пихаешь, она как резина растягивается, на величину свопа. Оно конечно тормозит вставку, но... Это лучше чем стек, который ВНЕЗАПНО рвётся, как стеклянный. Глючная программа жрущая память завязнет в свопе, и будет аккуратно остановлена OOM Killer'ом, но программа жрущая стек приводит к _непредсказуемым_ последствиям.
eddy писал(а): ↑24.11.2012 01:25
Некоторые экземпляры еще и категорично говорят: «Вах, у тебя goto, ты — быдло!»
А копнули бы они поглубже, да почитали оригинал, в котором понятным образом описывается, почему в некоторых случаях лучше goto не использовать, а в остальных — всегда пожалуйста!
немного не так: в _некоторых_ случаях goto использовать есть смысл, во всех остальных - это приводит к нечитаемому быдлокоду. Goto есть смысл использовать для выхода из вложенных циклов, т.к. break выходит только из одного. Если надо завершить сразу два, то без goto это будет дороже (придётся либо ставить ещё проверку, либо использовать return). Это редко встречается. Какие ещё есть оправданные случаи goto? Я(по молодости) других не встречал. Расскажите, если знаете. (кстати в bash goto нет, за то break/continue можно использовать с параметром).