Форум программистов, компьютерный форум CyberForum.ru

Сверхбольшая программа - C++

Восстановить пароль Регистрация
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
06.12.2012, 16:52     Сверхбольшая программа #1
Что будет, если написать программу, адреса функций которой уйдут за диапазон в 8 байт на х64 или 4 байта на х86? Такая программа не скопмилируется? Или не запустится? Или будет весить слишком много?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
06.12.2012, 17:00     Сверхбольшая программа #2
ИМХО нет, они просто не выйдут за диапазон: адреса вручную не вводятся, а выбираются компилятором, исходя из того, сколько занимают: предыдущие функции, так вот во-первых на столько огромную прогу, чтоб выйти за 8 байт всё человечество не успеет написать за век, а во-вторых пока нет 128-ми битной среды разработки и такого же компилятора, исходник этого монстра просто не влезет в среду и компилировать будет нечего. За 4 байта толпой ещё можно выйти по времени, но в среду и это не влезет, они вроде пока 32-х битные. 64-битным прогам 4-х байт не хватает больше на данные.
NoMasters
Псевдослучайный
1740 / 1083 / 70
Регистрация: 13.09.2011
Сообщений: 3,102
06.12.2012, 17:18     Сверхбольшая программа #3
Четырьмя байтами можно адресовать до четырёх гигабайт. Это на один процесс для 32-х битных систем. Вместе с данными упереться несложно, но чтобы столько занимал бинарник...
Ну а восемь байт — это до шестнадцати эксабайт, о таком ограничении беспокоиться пока рано
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
06.12.2012, 17:42  [ТС]     Сверхбольшая программа #4
Имелось ввиду специальное награмождение ненужных инструкций. Допустим, написать 4 миллиона функций вида int x1() {return 0;}, int x2() {return 0;} и так далее. Каждая такая функция равна примерно 2-4 ассемблерным строчкам, о адресах которых я и говорил (но запыл написать об этом). Получается (если все-таки по 4-е строки на функцию), написав миллион функций (или сделав программу, которая сгенерирует такой cpp'шник),инструкции функции x1000001 уйдут на 0ую ссылку (из-за переполнения) и начнут затирать сами себя D: Или же нет?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
06.12.2012, 17:52     Сверхбольшая программа #5
Цитата Сообщение от nexen Посмотреть сообщение
Допустим, написать 4 миллиона функций вида int x1() {return 0;}, int x2() {return 0;} и так далее. Каждая такая функция равна примерно 2-4 ассемблерным строчкам, о адресах которых я и говорил (но запыл написать об этом).
Сколько времени это займёт? Сколько места в исходнике займут эти кривофункции?
C++
1
int f(){return 0;}
-уже 18 байт без учёта номера функции, переноса строки и тому подобных символов. Даже если не считать номер, то исходники кривофункций занимают 72 мегабайта, разница 24 мегабайта в пользу исходника. А с номерами уже 100 мегабат. А сколько эта фигня займёт? Две команды: mov и ret + 4 байта данных. От силы 12 байт. 48 мегабайт. Разница более, чем двухкратная в пользу исходника. А по мере роста количества номера/имена функций удлинятся и будут занимать больше места в расчёте на одну функцию. 7 лишних байт - это только номера до 9 999 999.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
06.12.2012, 18:30  [ТС]     Сверхбольшая программа #6
taras atavin, вопроса про объем я не ставил, ибо он и так на поверхности.
Yandex
Объявления
06.12.2012, 18:30     Сверхбольшая программа
Ответ Создать тему

Метки
программа, рїсђрѕрісђр°рјрјр°, рўрірµсђс…р±рѕр»сњс€р°сџ, Сверхбольшая
Опции темы

Текущее время: 00:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru