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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

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

06.12.2012, 16:52. Просмотров 300. Ответов 5

Что будет, если написать программу, адреса функций которой уйдут за диапазон в 8 байт на х64 или 4 байта на х86? Такая программа не скопмилируется? Или не запустится? Или будет весить слишком много?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 16:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сверхбольшая программа (C++):

Программа , которая выводит время, за которое программа работает - C++
Вообщем, нужно что бы считалось время от начала работы программы, и выводилось на экран.

Первая программа. Код не компилируется и не запускается программа. - C++
Первая программа, первая ошибка Здравствуйте! Решил учить С++. Скачал книгу Programming: Principles and Practice Using C++, Бьерн...

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

Программа подсчета числа неуспевающих и программа поиска владельца автомобиля... - Pascal
Помогите пожалуйста решить 2 задачи: Составьте программу подсчета числа неуспевающих по информатике школьников в классе, и выводящую...

Программа с метками и оператором перехода GOTO. Программа с циклом полусловия - Pascal
Задача №9. Прошу вас, помогите. Не знаю как решать вообще.

Программа циков с неизвестным число повторений и программа с внутренним ветвлением - Pascal
1.Дано натуральное число n. Получить наименьшее натуральное число вида m в степени 2, превосходящее n. 2.Дан числовой массив А, состоящий...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
06.12.2012, 17:00 #2
ИМХО нет, они просто не выйдут за диапазон: адреса вручную не вводятся, а выбираются компилятором, исходя из того, сколько занимают: предыдущие функции, так вот во-первых на столько огромную прогу, чтоб выйти за 8 байт всё человечество не успеет написать за век, а во-вторых пока нет 128-ми битной среды разработки и такого же компилятора, исходник этого монстра просто не влезет в среду и компилировать будет нечего. За 4 байта толпой ещё можно выйти по времени, но в среду и это не влезет, они вроде пока 32-х битные. 64-битным прогам 4-х байт не хватает больше на данные.
0
NoMasters
Псевдослучайный
1754 / 1097 / 72
Регистрация: 13.09.2011
Сообщений: 3,134
06.12.2012, 17:18 #3
Четырьмя байтами можно адресовать до четырёх гигабайт. Это на один процесс для 32-х битных систем. Вместе с данными упереться несложно, но чтобы столько занимал бинарник...
Ну а восемь байт — это до шестнадцати эксабайт, о таком ограничении беспокоиться пока рано
0
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: Или же нет?
0
taras atavin
Ушёл с форума.
3569 / 1753 / 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.
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
06.12.2012, 18:30  [ТС] #6
taras atavin, вопроса про объем я не ставил, ибо он и так на поверхности.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 18:30
Привет! Вот еще темы с ответами:

Квин-программа, или программа, печатающая свой исходный текст - Visual Basic
Задаю этот вопрос под влиянием этой темы и предлагаю решение: Sub Kvin() Dim A(1 To 13) As String X = Chr$(65) + Chr$(40) ...

Программа для трёх маршрутов. Правильно ли написана программа? - PascalABC.NET
Всем здрасьте! Программа для трёх маршрутов. Кому не сложно подскажите правильно ли я написал?var a, b, c, d, e, f, g : boolean; s...

не пойму в чем дело, программа должна работать, но она черт побери не работает :( (программа по работе с реестром) - Delphi
Программа предназначена для поиска какого-нить слова по реестру и удаления ключа или раздела если в нем встречается искомое слово. С...

Что такое программа-сервер, программа-клиент - Базы данных
Учусь заочно и надо контрольную сделать вкратце я и сам объясню, но надо хотя бы листов на 10 Помогите плиз. Уже весь инет облазил....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.12.2012, 18:30
Ответ Создать тему
Опции темы

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