8 / 8 / 2
Регистрация: 07.03.2013
Сообщений: 85
|
|
1 | |
В чём писать?30.07.2013, 17:06. Показов 7922. Ответов 96
Метки нет (Все метки)
Всем привет, только начал изучения c++, подскажите в какой среде лучше начинать изучение? подходит ли для старта MSVS?
0
|
30.07.2013, 17:06 | |
Ответы с готовыми решениями:
96
Как лучше учиться: писать консольные приложения или оконные? И если писать оконные, то на чём лучше? На чем писать? На чем писать игру 2048 Хочу писать в блокноте, чем компилировать? |
1 / 1 / 0
Регистрация: 30.07.2013
Сообщений: 15
|
|
01.08.2013, 13:51 | 81 |
И прощай CRT.
Ещё должна быть привычка при отказе от CRT вызывать в конце ExitProcess(0);. Просто должна. Всем должна. Если хотите ну прям вообще мелкий EXE сделать, то выкиньте исключения и слепите всё в одну секцию и будет вам 1024 байта (наверное).
0
|
01.08.2013, 14:19 | 82 | |||||
Это весит 2560 байт. (пардон, что не на С++)
0
|
Higher
|
|
01.08.2013, 14:41 | 83 |
А зачем вообще гоняться за размером? Для этих целей все-таки есть си/ассемблер.
Просто очень многие оптимизации (такие как инлайнинг, построение таблицы всех возможных значений и т.п.) жертвуют размером бинаря, но при этом существенно увеличивают перформанс. Например. Там почему-то вставилась битая ссылка, вот еще одна. По асмовыхлопу видно, что оптимизация пожрала много места, зато ответ выдается мгновенно.
0
|
1 / 1 / 0
Регистрация: 30.07.2013
Сообщений: 15
|
||||||
01.08.2013, 15:17 | 84 | |||||
Раз пошла такая пьянка, то 1024 байт (+ /MERGE:.rdata=.text линкеру):
0
|
01.08.2013, 15:31 | 85 |
iel, Во! Вот это дело! Я тоже думал, чтобы не сохранять хэндл, а сразу отправлять из eax в стек.
Но решил, что это выигрыша в размере не даст. Кто бы мог подумать, что это вдвое уменьшит размер? Добавлено через 6 минут проверил - размер не поменялся. 2560 кБ а не-не не ВИЖУ! 1536 Байт Тут оказывается фишка не в экономии на лишнем mov stdout, eax А как это так программа без секции данных?
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
01.08.2013, 15:45 | 86 | |||||
Раз пошла такая пьянка, 512 байт, используются прерывания (код не мой):
Но это уже и вправду на меряние достоинством похоже.
0
|
01.08.2013, 16:00 | 87 |
прикольная фишка, но доступна, почему-то только для чтения.
При попытке скопировать туда другие данные всё крашится! например (mov byte ptr[msg], 20h ) Добавлено через 3 минуты Привет, Nameless One, я смотрю, ты вечно стремишься под другую Ось написать - то под Linux, то под DOS. Пиши сразу под какой-нибудь простейший микроконтроллер! - ещё меньше выйдет! Добавлено через 11 минут Под досом Hello World занимает действительно порядка 500 байт. Но у нас же не Дос, не Линукс и не прочие системы, а винда!
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
01.08.2013, 16:03 | 88 |
Kuzia domovenok, где я что-то под DOS писал? У меня DOS'а нет.
Почему «под другую»? Не вижу в названии темы слова Windows. И да, все примеры, которые я приводил в этой теме (кроме последнего), — кроссплатформенны. А вот ты ведешь себя так, как будто над тобой в детстве линуксоиды издевались (вместе с лисперами), и у тебя теперь тяжёлая моральная травма. Угу, ещё ты будешь говорить, что мне делать.
0
|
01.08.2013, 16:12 | 89 |
А ты чего грубишь то в ответ?
Раз предлагаешь другую программу, сразу оговаривайся, что писалась она под другую систему. Мы же начали с того, что компиляторы сравнивали. Ну вот и выходит, что у одной и той же программы в ДОСе будет экзешник одного размера, в Лине другого, в прочих системах третьего. И совершенно неверно говорить, что из одной проги бинарник получается меньше, чем из другой, если проги предназначены для разных платформ. Это тёплое с мягким... Добавлено через 3 минуты потому что в тему я начал писать с обсуждения MSVS как среды, с которой стоит начать учёбу. Говорить о том, что другие среды строят меньшие экзешники под досом или под линем или для какого-нибудь ARM контроллера абсолютно некорректно, т.к. сравнение то с MSVS идёт! И соответственно сравнение под Windows. Нельзя показать сборку ХеллоВорлда с помощью gcc под Линем и заключить, что gcc делает меньшие экзешники, чем msvs. Т.к. под виндой он будет строить наоборот большие.
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
01.08.2013, 16:23 | 90 |
Где я тебе нагрубил?
А я такое говорил? Ссылку на сообщение, пожалуйста. Вообще идея сравнивать размеры хелловордов неправильна изначально. В любом случае, это гораздо лучше потрясающе компетентных заявлений, что GCC генерирует бинарник в «В ПОЛСОТНИ (!) раз больше, чем вижуал студия!». А я вообще зашёл в эту тему со шлангом, так что твоя MSVS не в тему. Что, шах и мат? </sarcasm> Какой-такой «дос»? Ты к чему его вообще приплёл?
0
|
01.08.2013, 16:43 | 91 |
здесь и здесь и здесь
Теперь по поводу:
Приплёл я его вот к этому.
Сообщение от Nameless One
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
01.08.2013, 17:03 | 92 |
Какие слова конкретно показались тебе грубыми? Просто чтобы мне на будущее знать, как с тобой разговаривать.
И с чего ты взял, что этот код под DOS? Не знаю. Объясняю по порядку. Ты сказал про разницу в ПОЛСОТНИ раз между бинарником, полученным GCC и cl.exe (видимо, хотел уесть линуксоидов, религиозный фанатизм так и прёт, уже по аватарке видно). Я, видя такую грубую ошибку, решил разъяснить тебе, что размер бинарника сильно зависит от опций компиляции (заметь, без заявлений типа «ОЛОЛО GCC круче MSVS»). В качестве доказательств я привел скрины, на которых видны опции, передаваемые компилятору (чтобы ты сам мог у себя проверить, т.к. GCC, судя по всему, у тебя установлен), а также размер получаемого бинарника. На Windows по понятным причинам я не проверял, но я уверен, что размер там получится не сильно больший. Далее я вспомнил про другие факторы, влияющие на размер бинарника, а именно, разрядность ОС и версия компилятора, о чем и указал в следующем сообщении. Т.к. у меня система 64-разрядная, а подходящих виртуалок нет, я показал скриншот сессии jslinux, на котором видна разрядность ОС (архитектура i586 — вывод uname -a — значит, разрядность 32 бита) и версия GCC (4.3 — вывод gcc --version). Опять же, слов «ОЛОЛО GCC генерирует бинарник меньше 8 Кб» в этом сообщении нет. Так что мною двигало только желание просветить тебя в этом вопросе. Я понятно объяснил свою мысль?
0
|
01.08.2013, 17:52 | 93 |
с того, что этот код именно что под DOS. Или как там у тебя в прошлом? Всё ещё используется прерывание 21h?
А зачем тогда пишешь? И почему так сильно удивляешься, узнав, что написал оказывается программу для DOS?
по какой?
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
01.08.2013, 18:08 | 94 |
А как оно у меня в Linux запустилось, если код под DOS? Или они бинарно совместимы?
Ты меня спросил про Windows (зачем — непонятно), я тебе и ответил. А ты, как я вижу, продолжаешь делать необоснованные заявления. Так держать! Не задавай глупых вопросов, пожалуйста. Которая у тебя была.
0
|
KOPOJI
|
||||||
01.08.2013, 19:08
#95
|
||||||
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
01.08.2013, 19:39 | 96 |
Кузя, да успокойся ты уже:
0
|
1 / 1 / 0
Регистрация: 30.07.2013
Сообщений: 15
|
|||||||
01.08.2013, 23:14 | 97 | ||||||
int 2Eh - windows
int 80h - linux sysenter - windows/linux Прерывания (int) в ring3 используются, чтобы перейти из этого ring3 в ring0, выполнить системную функцию и вернуться обратно в ring3. DOS работал в реальном режиме в отличие от современных ОС, работающих в защищённом. Как бы вообще гигантская разница. Начиная с 3-го пентиума (вроде) появилась инструкция "sysenter" для той же задачи (Windows XP, Linux 2.6?). Так что [допустил грубую ошибку], Кузя. Признай это. Нафига оффтоп развели, создали бы тему "У кого меньше бинарник" и там бы мерялись.
1
|
01.08.2013, 23:14 | |
01.08.2013, 23:14 | |
Помогаю со студенческими работами здесь
97
На чем писать игры, изучив основы C++? В чем писать? На чём писать GUI На чем писать почтовый клиент Чем читать-писать XML В чём писать, в MFC или CLR? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |