Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / оптимизация памяти при компиляции / 14 сообщений из 14, страница 1 из 1
27.01.2016, 22:27
    #39156990
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
я тут пишу сервер для веба, решил определить заголовки таким образом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
namespace headers {
#define CREATE_HEADER(class_name, header_name) \
class class_name : public header { public: \
	class_name(const std::string& v) : header(header_name,v) {} \
	class_name(const std::initializer_list<std::string>& v) : header(header_name,v) {} \
};

CREATE_HEADER(age,"Age")
} // headers namespace



header - это класс заголовка, его можно создать просто указав имя. но некоторые заголовки я хочу определить. age - пример.

вот вопрос - поскольку это в заголовочном файле, то сколько памяти будет расходоваться если такой файл подключить при компиляции? меньше ли памяти будет расходоваться если определнеия перенести в cpp файл?
я просто часто компилю где-нибудь где памяти мало, и часто компилятор не могет скомпилить из-за этого, приходится дополнительные параметры указывать.
...
Рейтинг: 0 / 0
27.01.2016, 23:09
    #39157003
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_blackрешил определить заголовки таким образом
Назачем это?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2016, 23:32
    #39157014
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
Dimitry Sibiryakovalexy_blackрешил определить заголовки таким образом
Назачем это?

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

хотя может и по-другому сделаю.. но вопрос все равно интересен :)
...
Рейтинг: 0 / 0
27.01.2016, 23:38
    #39157018
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_blackнекоторые заголовки часто используются, писать удобнее. также сравнивать
легче и искать. не ошибешься когда передаешь..
А что, на всё это map <string, string> недостаточно?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.01.2016, 09:14
    #39157152
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_black.

вот вопрос - поскольку это в заголовочном файле, то сколько памяти будет расходоваться если такой файл подключить при компиляции? меньше ли памяти будет расходоваться если определнеия перенести в cpp файл?


не имеет значения, где ты это указываешь, в заголовке или в исходном модуле.

то, что ты пишешь - вообще определение класса, оно на использование памяти никак не влияет.
...
Рейтинг: 0 / 0
28.01.2016, 09:21
    #39157158
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_black,

Идея конечно полный бред, заголовки надо определять данными, и если нужны стандартные, то нужно наследовать классы, генерирующие эти заголовки, а не сами заголовки.
...
Рейтинг: 0 / 0
28.01.2016, 11:30
    #39157261
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_black,
вместо этого

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
namespace headers {
#define CREATE_HEADER(class_name, header_name) \
class class_name : public header { public: \
	class_name(const std::string& v) : header(header_name,v) {} \
	class_name(const std::initializer_list<std::string>& v) : header(header_name,v) {} \
};

CREATE_HEADER(age,"Age")
} // headers namespace



надо было писать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// yyy.hpp
#define CREATE_HEADER(class_name, header_name) \
class class_name : public header { public: \
	class_name(const std::string& v) : header(header_name,v) {} \
	class_name(const std::initializer_list<std::string>& v) : header(header_name,v) {} \
};

// xxx.cpp
namespace headers {
CREATE_HEADER(age,"Age")
} // headers namespace



Вот это реально имеет значение, потому что #define все же должен быть сделан один раз и в заголовке.
...
Рейтинг: 0 / 0
28.01.2016, 11:51
    #39157287
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
MasterZiv,

ну.. тогда надо сделать два макроса, один будет генерировать определнеие, другой будет генерировать объявления... иначе если я подключу файл xxx.hpp то компилятор не бдует знать что где-то сгенерированы заголовки..
я не понял фразу "наследовать классы, генерирующие эти заголовки".. ?

идея взялась от libh2o - там создан массив char** статический. он содержит названия кучи заголовков, и сделаны define - смещение массива, с названиями загловков.

я не знаю, меня правильно поняли - памяти не в рантайме, а во время компиляции.. то есть чтобы я скажем мог скомпилить если памяти доступно меньше гига..

авторА что, на всё это map <string, string> недостаточно?..нет.. в общем я так и делал, но.. к примеру установка хеадера
Код: plaintext
1.
header("If-Mach","...");

is error prone
так можно долго гадать что же случилось, почему клиент все время скачивает один и тот же файл.. (я там букву пропустил.)
...
Рейтинг: 0 / 0
28.01.2016, 11:56
    #39157291
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_blackто есть чтобы я скажем мог скомпилить если памяти доступно меньше гига..
для этого специальные усилия не требуются.
Какая ОС и компилятор?
...
Рейтинг: 0 / 0
28.01.2016, 13:37
    #39157439
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_blackну.. тогда надо сделать два макроса, один будет генерировать определнеие, другой будет генерировать объявления... иначе если я подключу файл xxx.hpp то компилятор не бдует знать что где-то сгенерированы заголовки..


Я не понимаю, где ты здесь нашёл объявление.
Здесь его нет.
Есть определение макроса и определение класса с помощью этого макроса.
...
Рейтинг: 0 / 0
28.01.2016, 13:40
    #39157444
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_blackидея взялась от libh2o - там создан массив char** статический. он содержит названия кучи заголовков, и сделаны define - смещение массива, с названиями загловков.


Ну у тебя тут и близко нет к этому.

alexy_blackя не знаю, меня правильно поняли - памяти не в рантайме, а во время компиляции.. то есть чтобы я скажем мог скомпилить если памяти доступно меньше гига..

авторА что, на всё это map <string, string> недостаточно?..нет.. в общем я так и делал, но.. к примеру установка хеадера
Код: plaintext
1.
header("If-Mach","...");

is error prone
так можно долго гадать что же случилось, почему клиент все время скачивает один и тот же файл.. (я там букву пропустил.)


Я не понимаю этот поток сознания...
...
Рейтинг: 0 / 0
28.01.2016, 14:38
    #39157529
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
Изопропилдля этого специальные усилия не требуются.
Какая ОС и компилятор?

debian sid, gcc-5.x я регулярно сталкиваюсь с проблемой нехваткой памяти. некоторые файлы приходится компилить с указанием когда запускать ggc, без этого проваливается. но так намного дольше компилиться. обычно доступно около 800М

я говорю о том, что в этом макросе не объявление конструктора, а сразу определение :)
то есть там после круглых скобок стоит не ; а определение.
...
Рейтинг: 0 / 0
28.01.2016, 14:40
    #39157539
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
MasterZivЯ не понимаю этот поток сознания...
там я писал о том, что можно ошибится, букву например пропустить если использовать только std::map<std::string, std::string>
...
Рейтинг: 0 / 0
28.01.2016, 14:43
    #39157545
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация памяти при компиляции
alexy_blackк примеру установка хеадера is error prone
Обычно для этого используют константы:
Код: sql
1.
2.
3.
const char* const header_If_match = "If-match";

header(header_If_match,"...");


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / оптимизация памяти при компиляции / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]