да ладно. даже если глобальная переменная в хипе, все равно компилятор достаточно умен, чтобы изничтожить ее, если она не используетсяМальчик-Одуванчик wrote: int i=42; // то в этом случае создастся глобальная переменная, под неё отведется место в памяти даных и компилятору тут ничего оптимизировать
более того, если я напишу
char* a = "уд";
char* b = "уд";
то два указателя будут указывать на одну строку. не знаю, есть ли это в стандарте, но по факту это обычно так.
ну, вот эти наколенные компиляторы для микропроцессоров - это песТня с припевами. у нас было подобное, типаМальчик-Одуванчик wrote: хотя мой компилятор С для микропроцессора даже этого не умеет.
x=a+b;
и эта срань генерирует неправильный код. заменяешь на
x=a+b+1;
x--;
и все работает корректно. причем мы машинный код смотрели. реально компилятор глючит. только это было лет 16 назад на процессоре, если не изменяет маразм... ага, изменяет. хотел сказать НС10, но нет такого. гугл подсказал НС11, но это 8-битный, а тот вроде 16-битным был. короче, такая древность, что и не вспомнить
я согласен про нюансМальчик-Одуванчик wrote:Но есть нюанс: то о чем писал в отношении обобщенных функций определяется стандартом, а вот последнее отдано на откуп производителям компиляторов
но этот нюанс прямо вытекает из семантики. ну смотрите, грубо говоря. если вы написали template List<T>. понятно же, что компилятор не будет генерить код под все типы, которые он знает. то, что вы привели в пример - туда-сюда то же самое