glonium 0 30 мая, 2012 Опубликовано 30 мая, 2012 (изменено) · Жалоба Добрый день господа форумчане! Настроил среду разработки Eclipse как сказано тут http://makesystem.net/?p=988 Использую toolchain Codebench Lite! Написал простенький список (приложен ниже) и скомпилировал проект когда посмотрел на размер кода был немного обескуражен! Размер кода стал равен 87384 Байт! В оптимизаторе поставил генерировать отдельные секции и в линкере удалять неиспользуемые секции, но не помогает! В чём тут может быть дело? PS Может поменять компилятор, вернее версию??? Что то где-то слышал что помогает! Вот только на какую менять??? list.rar Изменено 30 мая, 2012 пользователем glonium Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Ну смотри - ты приложил хидер с шаблоном. Шаблон после компиляции любым компилятором занимает ровно 0 байт :) Место занимают конкретные инстанцирования этого шаблона. Так что чтобы что-то тебе сказать, надо посмотреть на все остальное - приложи компилябельный проект целиком. #include "exception.h" намекает на использование исключений. Исключения требуют довольно жирного рантайма - может быть дело в этом. У меня минимальный elf занимает порядка 100 байт или около того - int main() { while (1); } с отключенным стартовым кодом. Если добавить стартовый код, размер станет несколько больше. Если добавить поддержку исключений - станет килобайт 60 или около того. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glonium 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Прошу прошения что то не подумал выложить проект! Исключения самописанные! Вот проект целиком first.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба дык а map ты не пытался сгенерить? Сгенери, посмотри кто у тебя самый толстый... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glonium 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Да сгенерил только ничего не понял из него в нём куча всего! Да вы правы к сожалению всё дело в исключениях! они в моём случае добавляют около 70 кб! А есть ли способ обойти это или только отказом от исключений? Да и поэкспериментировав я наткнулся на то что оператор new тоже много чего тянет за собой! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Насчет исключений не подскажу, полагаю, что поддержка их зарыта глубоко в компиляторе и просто так переписать библиотеку не получится. Да и поэкспериментировав я наткнулся на то что оператор new тоже много чего тянет за собой!Да, тянет. Используйте свой менеджер памяти, например вот этот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glonium 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Спасибо за ответ! Интересное предложение. А со своим диспетчером памяти у меня механизм виртуальных функций будет работать, а так же dunamic_cast<>??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба А со своим диспетчером памяти у меня механизм виртуальных функций будет работать, а так же dynamic_cast<>???Виртуальные функции работают (проверено, использую), за них конструктор отвечает. А он вызывается после выделения памяти оператором new(). А про dynamic_cast я только краем уха слышал, может кто-то другой подскажет. Хотя навряд ли она завязана на менеджер памяти - он лишь выделяет кусок памяти запрошенного размера. Если dynamic_cast работает с placement new(), то и с этим работать должен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glonium 0 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба Поэкспериментировав с перегрузкой операторов new и delete пришёл к интересным заключениям! Вариант 1 : #include "stmlib/stm32f10x.h" #include <stdlib.h> void *operator new (size_t size) { return malloc(size); } void operator delete (void *p) { free(p); return; } int main (void) { int *a=new int(10); while (1){}; return 0; } Компилиться в 4 Кб с использованием стандартных free и malloc! 2 Случай /* void *operator new (size_t size) { return malloc(size); } void operator delete (void *p) { free(p); return; } */ int main (void) { int *a=new int(10); while (1){}; return 0; } Компилиться в 80Кб! Почему такая разница? Вроде стандартный new и delete опирается на стандартные malloc и free! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба А если так: #include <new> ..... */ int main (void) { int *a=new(std::nothrow) int(10); while (1){}; return 0; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glonium 0 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба А если так: CODE #include <new> ..... */ int main (void) { int *a=new(std::nothrow) int(10); while (1){}; return 0; } Так тоже порядка 80Кб! Да и вообще у меня подозрение что в c++ другой аллокатор памяти потяжелее чем в с! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба Так тоже порядка 80Кб! Да и вообще у меня подозрение что в c++ другой аллокатор памяти потяжелее чем в с! glonium, вы не могли бы проект целиком выложить. Интересно бы посмотреть, а то у меня вообще не собирается. P.S. И какой компилятор?. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glonium 0 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба P.S. И какой компилятор?. Использую CodeBench руководствовался это статьёй при установке IDE http://makesystem.net/?p=988 glonium, вы не могли бы проект целиком выложить. Интересно бы посмотреть, а то у меня вообще не собирается. first.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба Чтобы не подтягивались исключения, надо компилировать с ключом -fno-exceptions. При использовании чисто виритуальных функций иногда подключаются исключения и с этим ключиком. В этом случае спасает вот этот файл. Просто добавьте его к своему проекту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glonium 0 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба Чтобы не подтягивались исключения, надо компилировать с ключом -fno-exceptions. Поставил ключик -fno-exceptions все равно размер кода не уменьшается, при этом виртуальные функции не использую! PS видать это вовсе не исключения так весят а аллокатор памяти! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться