forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Оптимизация или Разделение программы на исполняемые компоненты. (http://forum.boolean.name/showthread.php?t=12585)

Greymem 31.05.2010 13:05

Оптимизация или Разделение программы на исполняемые компоненты.
 
Здравствуйте, у меня такая ситуация:
Написал каркас физического движка( на котором потом буду строить уже все события в игре) для своей игрухи. В нём я описал типы, и математические вычисления с этими типами, больше ничего в коде нет. При компиляции .EXE получается очень и очень здоровым. Хотелось бы как-нибудь разделить код на элементы(не модули, не вспомогательный инклуд), чтобы при компиляции генерировалось несколько файлов. И тогда при незначительном исправлении одного отрезка, не компилировать полностью весь файл опять, а только один файл из множества файлов одной системы. И можно будет в дальнейшем работать с этими кусками по отдельности.

Я конечно понимаю что можно использовать DLL, но как в них использовать свои собственные типы-ума не приложу.

Можно как в DOS-играх, наделать кучу EXE, и чтобы главный EXE запускал все остальные, передавая управления им, в зависимости от действий в игре. Но не думаю, что это практично.

Как еще можно сделать так, чтобы при компиляции был не один файл EXE, а несколько отдельных бинарных файлов?

Жека 31.05.2010 14:04

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Сразу - я не знаю как сделать то, что ты хочешь, но:
Цитата:

Сообщение от Greymem (Сообщение 148495)
При компиляции .EXE получается очень и очень здоровым.

Меня интересует точная цифра размера ЕХЕ-файла!!!

На моей памяти большой ехе-шник получается при использовании incbin. Если у тебя такое есть, то просто ресурсы в отдельный файл. А если нет, то поделись как удалось достичь таких высот (размеров).

Greymem 31.05.2010 15:14

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Для меня 30-50 метров это уже большой размер. =))))
А ведь размер еще и вырастет, когда на основе каркаса, я буду делать физический мир. И так EXE получается будет увеличиваться, и увеличиваться, и я не заинтересован в разростании этого "снежного кома".

Задача такая, в общих чертах, чтобы к примеру если я разделю по смыслу все файлы(этот для физики, этот для обработки графики, этот для того то, этот для сего-то), то если их будет к примеру 10, то каждый должен весить скажем 1/10 от размера всей проги. То есть чтобы можно было разбить файл, разумеется точно размер угадать не получиться. Но мне важно разбить.

Для чего это нужно? Для того чтобы было легче обновлять игруху по кускам, а не целый EXE. Я только на начальной стадии разработки, и уже стремлюсь сделать так, чтобы потом не переделывать, и не пересматривать структуру.

Из специфичного использовал только пару вспомогательных модулей.
А так, голый родной код.
Функцию в твоем ответе не юзал.
Все ресурсы, будь то текст, графика, у меня лежат в отдельных файлах.

Randomize 31.05.2010 15:32

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Exe 30 метров? - Бред.
Из одних исходников не получится. Или у тебя там исходникв на 800 метров?
Может ты через data запекаешь ресурсы? Тогда откажись.
Точный вес exe в студию.
Точный вес всех исходников тоже давай.

Также опиши все модули которые поключаешь.
Директиву Framework используешь?

А лучше приложи exe без ресурсов и прочей хрени.

Greymem 31.05.2010 15:33

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
По прогнозам так и будет при нынешних 10 метрах. =))))
Рамку не юзал, моды(GNet, bah.dbmsql, bah.dbmysql) дома взвешу - скажу.
Неа, не через DATA. =))))

SBJoker 31.05.2010 15:51

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
У меня подозрение на аццкий быдлокод.

Greymem 31.05.2010 15:54

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Цитата:

Сообщение от SBJoker (Сообщение 148510)
У меня подозрение на аццкий быдлокод.

Я конечно, не говорю что мой код идеален, разумеется я его оптимизирую(по маленьку) и даже 2 раза переделывал, разложил все методы, функции по полочкам. Сейчас вот довольно опрятный кодик.

Но, нет пределу совершенству, как говориться.
Просто меня такие прогнозы(о размере файла) сильно пугают.

И все-же, даже при весе EXE в 10 МБ, как же разделить по уму?

SBJoker 31.05.2010 16:02

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Смотря что у вас там, общепринятый способ разделения - вынос части кода в dll.
Т.к. тема в разделе BlitzMAX предполагаю что на нём вы и пишите.
Тогда стоит упомянуть об рекомендованом использовании Framework и Import только необходимых модулей. Если же фреймворк не указан, то подключаются все модули что увеличивает размер итогового файла.

Так же откажитесь от IncBin. И ваш экзешник врятли привысит 2мб.

Greymem 31.05.2010 16:05

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
ОООО отлично, при этом лучше Strict использовать да?
Спасибо большое, попробую.

А что вообще, из стандартных модулей, используют в качестве Framework?

Тем не менее, тема не раскрыта. Вернемся к сабжу. На будущее (думаю может еще кому пригодиться) как, кроме использования DLL, добиться разделения?

Randomize 31.05.2010 17:17

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Кроме использования DLL или скриптов не знаю способов, вес меня всегда устраивал.
Прошу обратить внимание на debug режим, при нём exe не редко достигают большого размера.
Попоробуй скомпилировать в release режиме. Если в твоём IDE нет такой возможности, то воспользуйся стандартным.
Весить будет в 5 раз меньше.

SBJoker 31.05.2010 18:34

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Самое лучшее начинать главный файл приложения так:
Код:

SuperStrict

Framework brl.blitz

Import [модуль 1]
Import [модуль 2]
...

Узнать какие модули нужны можно или руководствуясь опытом, или по алгоритму:
1. Компилируем программу, если вылетает ошибка о неизвесной функции - нехватает модуля.
2. Смотрим что за функция, вызываем по ней справку.
3. Смотри к какому модулю она принадлежит (это определяем по адресу страницы или по нажатию ссылки Source которая откроет исходник модуля где и будет его название).
4. Повтроряем всё заново до отсутствия неопознаных функций.

Жека 01.06.2010 06:48

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Я для уменьшения размера ехе-шника также использую программку UPX, просто кидаю на неё свой ехе и радуюсь результату!:)

Вот тут скачать можно: http://upx.sourceforge.net/

Randomize 01.06.2010 11:52

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Цитата:

Сообщение от Жека (Сообщение 148607)
Я для уменьшения размера ехе-шника также использую программку UPX, просто кидаю на неё свой ехе и радуюсь результату!:)

Вот тут скачать можно: http://upx.sourceforge.net/

На него часто антивирусы ругаются.
Цитата:

1. Компилируем программу, если вылетает ошибка о неизвесной функции - нехватает модуля.
На этот случай есть Framework assistant.
Брать тут: http://homepage.ntlworld.com/config/fa/#Download

Greymem 01.06.2010 13:52

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Всем огромное спасибо, так... с уменьшением EXE мы разобрались.
А как разбивать?
Тема так и не раскрыта. =)

Randomize 01.06.2010 14:38

Ответ: Оптимизация или Разделение программы на исполняемые компоненты.
 
Цитата:

Сообщение от Greymem (Сообщение 148637)
Всем огромное спасибо, так... с уменьшением EXE мы разобрались.

Поведайте, как. Просто интересно, что именно помогло.

Цитата:

Сообщение от Greymem (Сообщение 148637)
А как разбивать?
Тема так и не раскрыта. =)

Я уже предлагал.
1) Использование выносных скриптов.
При использовании этого способа нужно помнить, что скорость выполнения скриптов низка. И для релизации поиска пути или расчётов физики использование скриптов не приемлимо.

http://www.blitzmax.com/Community/posts.php?topic=68845

2) Написание dll.
Подходит для сложных рачётов.
Кроссплатформенность отпадает.
Подробнее тут:
http://www.progz.ru/forum/index.php?showtopic=27569


Часовой пояс GMT +4, время: 15:04.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot