Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/42: Рейтинг темы: голосов - 42, средняя оценка - 4.71
8 / 8 / 2
Регистрация: 07.03.2013
Сообщений: 85
1

В чём писать?

30.07.2013, 17:06. Показов 7922. Ответов 96
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, только начал изучения c++, подскажите в какой среде лучше начинать изучение? подходит ли для старта MSVS?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2013, 17:06
Ответы с готовыми решениями:

Как лучше учиться: писать консольные приложения или оконные? И если писать оконные, то на чём лучше?
На днях я узнал про Borland c++ builder и хочу воспользоваться им, но можно и писать код, что-бы...

На чем писать?
Подскажите на чем можно писать программы с графическим интерфейсом на С++.

На чем писать игру 2048
Дали задание: написать игру 2048 (причем внешний вид не играет никакой роли, главное, чтобы...

Хочу писать в блокноте, чем компилировать?
Здравствуйте, я хочу писать код в обычном блокноте, но не могу разобраться чем и каким образом...

96
1 / 1 / 0
Регистрация: 30.07.2013
Сообщений: 15
01.08.2013, 13:51 81
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Dani Посмотреть сообщение
Kuzia domovenok, это весит 3072 байта:
C++
1
2
3
#pragma comment(linker,"/entry:MyStartup") 
#include <Windows.h>
void MyStartup(){ DWORD written;   WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), "Hello World!", 12, &written, NULL);}
И прощай CRT.
Ещё должна быть привычка при отказе от CRT вызывать в конце ExitProcess(0);. Просто должна. Всем должна.
Если хотите ну прям вообще мелкий EXE сделать, то выкиньте исключения и слепите всё в одну секцию и будет вам 1024 байта (наверное).
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
01.08.2013, 14:19 82
Это весит 2560 байт. (пардон, что не на С++)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.386
.model flat, stdcall
option casemap:none
include INC\windows.inc
include INC\kernel32.inc
includelib LIB\kernel32.lib
.data
stdout dd ?
msg db "Hello world!", 0dh, 0ah
cWritten dd ?
.code
start:
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
invoke WriteConsoleA, stdout, ADDR msg, sizeof msg, ADDR cWritten, NULL
invoke ExitProcess, 0
end start
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2013, 14:41 83
А зачем вообще гоняться за размером? Для этих целей все-таки есть си/ассемблер.
Просто очень многие оптимизации (такие как инлайнинг, построение таблицы всех возможных значений и т.п.) жертвуют размером бинаря, но при этом существенно увеличивают перформанс.
Например. Там почему-то вставилась битая ссылка, вот еще одна.
По асмовыхлопу видно, что оптимизация пожрала много места, зато ответ выдается мгновенно.
0
1 / 1 / 0
Регистрация: 30.07.2013
Сообщений: 15
01.08.2013, 15:17 84
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Это весит 2560 байт. (пардон, что не на С++)
Раз пошла такая пьянка, то 1024 байт (+ /MERGE:.rdata=.text линкеру):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.code
msg db "Hello world!", 0dh, 0ah
start:
invoke GetStdHandle, STD_OUTPUT_HANDLE
push NULL
push NULL
push sizeof msg
push offset msg
push eax
call WriteConsoleA
invoke ExitProcess, 0
end start
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
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 байт, используются прерывания (код не мой):

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        SECTION .data
msg:            db "Hello, World!", 10
len:            equ $-msg
 
        SECTION .text
 
                global main
main:
        mov     edx,len
        mov     ecx,msg
        mov     ebx,1
        mov     eax,4
 
        int     0x80
        mov     ebx,0
        mov     eax,1
        int     0x80
Люди достигали и размеров ~150 байт.

Но это уже и вправду на меряние достоинством похоже.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
01.08.2013, 16:00 87
Цитата Сообщение от iel Посмотреть сообщение
.code
msg db "Hello world!", 0dh, 0ah
прикольная фишка, но доступна, почему-то только для чтения.
При попытке скопировать туда другие данные всё крашится!
например (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'а нет.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Привет, Nameless One, я смотрю, ты вечно стремишься под другую Ось написать
Почему «под другую»? Не вижу в названии темы слова Windows. И да, все примеры, которые я приводил в этой теме (кроме последнего), — кроссплатформенны.

А вот ты ведешь себя так, как будто над тобой в детстве линуксоиды издевались (вместе с лисперами), и у тебя теперь тяжёлая моральная травма.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Пиши сразу под какой-нибудь простейший микроконтроллер! - ещё меньше выйдет!
Угу, ещё ты будешь говорить, что мне делать.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
01.08.2013, 16:12 89
Цитата Сообщение от Nameless One Посмотреть сообщение
Угу, ещё ты будешь говорить, что мне делать
А ты чего грубишь то в ответ?
Раз предлагаешь другую программу, сразу оговаривайся, что писалась она под другую систему. Мы же начали с того, что компиляторы сравнивали. Ну вот и выходит, что у одной и той же программы в ДОСе будет экзешник одного размера, в Лине другого, в прочих системах третьего.
И совершенно неверно говорить, что из одной проги бинарник получается меньше, чем из другой, если проги предназначены для разных платформ. Это тёплое с мягким...

Добавлено через 3 минуты
Цитата Сообщение от Nameless One Посмотреть сообщение
Почему «под другую»? Не вижу в названии темы слова Windows.
потому что в тему я начал писать с обсуждения MSVS как среды, с которой стоит начать учёбу. Говорить о том, что другие среды строят меньшие экзешники под досом или под линем или для какого-нибудь ARM контроллера абсолютно некорректно, т.к. сравнение то с MSVS идёт! И соответственно сравнение под Windows.

Нельзя показать сборку ХеллоВорлда с помощью gcc под Линем и заключить, что gcc делает меньшие экзешники, чем msvs. Т.к. под виндой он будет строить наоборот большие.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
01.08.2013, 16:23 90
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А ты чего грубишь то в ответ?
Где я тебе нагрубил?

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
И совершенно неверно говорить, что из одной проги бинарник получается меньше, чем из другой, если проги предназначены для разных платформ. Это тёплое с мягким...
А я такое говорил? Ссылку на сообщение, пожалуйста. Вообще идея сравнивать размеры хелловордов неправильна изначально.

В любом случае, это гораздо лучше потрясающе компетентных заявлений, что GCC генерирует бинарник в «В ПОЛСОТНИ (!) раз больше, чем вижуал студия!».

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
потому что в тему я начал писать с обсуждения MSVS как среды, с которой стоит начать учёбу. [...] И соответственно сравнение под Windows.
А я вообще зашёл в эту тему со шлангом, так что твоя MSVS не в тему. Что, шах и мат? </sarcasm>

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Говорить о том, что другие среды строят меньшие экзешники под досом
Какой-такой «дос»? Ты к чему его вообще приплёл?
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
01.08.2013, 16:43 91
Цитата Сообщение от Nameless One Посмотреть сообщение
Где я тебе нагрубил?
здесь и здесь и здесь
Цитата Сообщение от Nameless One Посмотреть сообщение
Угу, ещё ты будешь говорить, что мне делать
Цитата Сообщение от Nameless One Посмотреть сообщение
- msvs2008 у меня
- И как там, в прошлом?
Цитата Сообщение от Nameless One Посмотреть сообщение
некоторым людям нравится страдать.
Теперь по поводу:
Цитата Сообщение от Nameless One Посмотреть сообщение
Какой-такой «дос»? Ты к чему его вообще приплёл?
Приплёл я его вот к этому.
Цитата Сообщение от Nameless One
Раз пошла такая пьянка, 512 байт, используются прерывания (код не мой):
Или под что это если не под дос? Разве винда даёт доступ к настоящим прерываниям?
Цитата Сообщение от Nameless One Посмотреть сообщение
А я такое говорил? Ссылку на сообщение, пожалуйста. Вообще идея сравнивать размеры хелловордов неправильна изначально.
А этот пост ты к чему тогда написал? В чём писать?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
01.08.2013, 17:03 92
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
здесь и здесь и здесь
Какие слова конкретно показались тебе грубыми? Просто чтобы мне на будущее знать, как с тобой разговаривать.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Вот к этому.
И с чего ты взял, что этот код под DOS?

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Разве винда даёт доступ к настоящим прерываниям?
Не знаю.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А этот пост ты к чему тогда написал?
Объясняю по порядку. Ты сказал про разницу в ПОЛСОТНИ раз между бинарником, полученным GCC и cl.exe (видимо, хотел уесть линуксоидов, религиозный фанатизм так и прёт, уже по аватарке видно).

Я, видя такую грубую ошибку, решил разъяснить тебе, что размер бинарника сильно зависит от опций компиляции (заметь, без заявлений типа «ОЛОЛО GCC круче MSVS»). В качестве доказательств я привел скрины, на которых видны опции, передаваемые компилятору (чтобы ты сам мог у себя проверить, т.к. GCC, судя по всему, у тебя установлен), а также размер получаемого бинарника. На Windows по понятным причинам я не проверял, но я уверен, что размер там получится не сильно больший.

Далее я вспомнил про другие факторы, влияющие на размер бинарника, а именно, разрядность ОС и версия компилятора, о чем и указал в следующем сообщении. Т.к. у меня система 64-разрядная, а подходящих виртуалок нет, я показал скриншот сессии jslinux, на котором видна разрядность ОС (архитектура i586 — вывод uname -a — значит, разрядность 32 бита) и версия GCC (4.3 — вывод gcc --version). Опять же, слов «ОЛОЛО GCC генерирует бинарник меньше 8 Кб» в этом сообщении нет.

Так что мною двигало только желание просветить тебя в этом вопросе. Я понятно объяснил свою мысль?
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
01.08.2013, 17:52 93
Цитата Сообщение от Nameless One Посмотреть сообщение
И с чего ты взял, что этот код под DOS?
с того, что этот код именно что под DOS. Или как там у тебя в прошлом? Всё ещё используется прерывание 21h?
Цитата Сообщение от Nameless One Посмотреть сообщение
Не знаю.
А зачем тогда пишешь? И почему так сильно удивляешься, узнав, что написал оказывается программу для DOS?
Цитата Сообщение от Nameless One Посмотреть сообщение
по аватарке видно)
по какой?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
01.08.2013, 18:08 94
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
с того, что этот код именно что под DOS.
А как оно у меня в Linux запустилось, если код под DOS? Или они бинарно совместимы?

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А зачем тогда пишешь? И почему так сильно удивляешься, узнав, что написал оказывается программу для DOS?
Ты меня спросил про Windows (зачем — непонятно), я тебе и ответил.

А ты, как я вижу, продолжаешь делать необоснованные заявления. Так держать!

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
по какой?
Не задавай глупых вопросов, пожалуйста. Которая у тебя была.
0
KOPOJI
01.08.2013, 19:08
  #95
 Комментарий модератора 
Заканчиваем полемику.
0
Эксперт функциональных языков программированияЭксперт Java
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
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
с того, что этот код именно что под DOS. Или как там у тебя в прошлом? Всё ещё используется прерывание 21h?А зачем тогда пишешь? И почему так сильно удивляешься, узнав, что написал оказывается программу для DOS?
int 2Eh - windows
int 80h - linux
sysenter - windows/linux

Прерывания (int) в ring3 используются, чтобы перейти из этого ring3 в ring0, выполнить системную функцию и вернуться обратно в ring3.
DOS работал в реальном режиме в отличие от современных ОС, работающих в защищённом. Как бы вообще гигантская разница.
Начиная с 3-го пентиума (вроде) появилась инструкция "sysenter" для той же задачи (Windows XP, Linux 2.6?).
Так что [допустил грубую ошибку], Кузя. Признай это.
Нафига оффтоп развели, создали бы тему "У кого меньше бинарник" и там бы мерялись.

 Комментарий модератора 
Пункт 3.1 Правил
1
01.08.2013, 23:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2013, 23:14
Помогаю со студенческими работами здесь

На чем писать игры, изучив основы C++?
Всем привет. Изначально я учил С++, чтобы создавать игры. Сейчас я более-менее изучил основы С++...

В чем писать?
Здравствуйте! Скажите какая есть альтернатива Microsoft Visual Studio? Ато Visual Studio...

На чём писать GUI
Нужен какая-нибудь не громоздкая, чтобы программа с пустым окном была до 1 мб со статической...

На чем писать почтовый клиент
Добрый день! Давайте по дискуссируем на чем лучше всего писать почтовый клиент, чтоб он был...

Чем читать-писать XML
Добрый день! Вот, возникла задача - нужно данные хранить в формате XML. Пишу на С++ (Visual...

В чём писать, в MFC или CLR?
В CLR всё более или менее понятно, но приложения написанные в CLR не запускаются на компьютерах...


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

Или воспользуйтесь поиском по форуму:
97
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru