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

В чём писать? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.79
DEMONSTR
7 / 7 / 2
Регистрация: 07.03.2013
Сообщений: 63
30.07.2013, 17:06     В чём писать? #1
Всем привет, только начал изучения c++, подскажите в какой среде лучше начинать изучение? подходит ли для старта MSVS?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 17:06     В чём писать?
Посмотрите здесь:

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны C++
C++ В чём ошибка?
В чём ошибка? C++
в чём ошибка? C++
В чём ошибка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iel
1 / 1 / 0
Регистрация: 30.07.2013
Сообщений: 15
01.08.2013, 13:51     В чём писать? #81
Цитата Сообщение от 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 байта (наверное).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2013, 14:41     В чём писать? #83
А зачем вообще гоняться за размером? Для этих целей все-таки есть си/ассемблер.
Просто очень многие оптимизации (такие как инлайнинг, построение таблицы всех возможных значений и т.п.) жертвуют размером бинаря, но при этом существенно увеличивают перформанс.
Например. Там почему-то вставилась битая ссылка, вот еще одна.
По асмовыхлопу видно, что оптимизация пожрала много места, зато ответ выдается мгновенно.
iel
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
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.08.2013, 15:31     В чём писать? #85
iel, Во! Вот это дело! Я тоже думал, чтобы не сохранять хэндл, а сразу отправлять из eax в стек.
Но решил, что это выигрыша в размере не даст.
Кто бы мог подумать, что это вдвое уменьшит размер?

Добавлено через 6 минут
проверил - размер не поменялся. 2560 кБ
а не-не не ВИЖУ! 1536 Байт
Тут оказывается фишка не в экономии на лишнем mov stdout, eax
А как это так программа без секции данных?
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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 байт.

Но это уже и вправду на меряние достоинством похоже.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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 байт. Но у нас же не Дос, не Линукс и не прочие системы, а винда!
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.08.2013, 16:03     В чём писать? #88
Kuzia domovenok, где я что-то под DOS писал? У меня DOS'а нет.

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

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

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

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

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

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

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

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

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Говорить о том, что другие среды строят меньшие экзешники под досом
Какой-такой «дос»? Ты к чему его вообще приплёл?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.08.2013, 16:43     В чём писать? #91
Цитата Сообщение от Nameless One Посмотреть сообщение
Где я тебе нагрубил?
здесь и здесь и здесь
Цитата Сообщение от Nameless One Посмотреть сообщение
Угу, ещё ты будешь говорить, что мне делать
Цитата Сообщение от Nameless One Посмотреть сообщение
- msvs2008 у меня
- И как там, в прошлом?
Цитата Сообщение от Nameless One Посмотреть сообщение
некоторым людям нравится страдать.
Теперь по поводу:
Цитата Сообщение от Nameless One Посмотреть сообщение
Какой-такой «дос»? Ты к чему его вообще приплёл?
Приплёл я его вот к этому.
Цитата Сообщение от Nameless One
Раз пошла такая пьянка, 512 байт, используются прерывания (код не мой):
Или под что это если не под дос? Разве винда даёт доступ к настоящим прерываниям?
Цитата Сообщение от Nameless One Посмотреть сообщение
А я такое говорил? Ссылку на сообщение, пожалуйста. Вообще идея сравнивать размеры хелловордов неправильна изначально.
А этот пост ты к чему тогда написал? В чём писать?
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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 Кб» в этом сообщении нет.

Так что мною двигало только желание просветить тебя в этом вопросе. Я понятно объяснил свою мысль?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.08.2013, 17:52     В чём писать? #93
Цитата Сообщение от Nameless One Посмотреть сообщение
И с чего ты взял, что этот код под DOS?
с того, что этот код именно что под DOS. Или как там у тебя в прошлом? Всё ещё используется прерывание 21h?
Цитата Сообщение от Nameless One Посмотреть сообщение
Не знаю.
А зачем тогда пишешь? И почему так сильно удивляешься, узнав, что написал оказывается программу для DOS?
Цитата Сообщение от Nameless One Посмотреть сообщение
по аватарке видно)
по какой?
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.08.2013, 18:08     В чём писать? #94
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
с того, что этот код именно что под DOS.
А как оно у меня в Linux запустилось, если код под DOS? Или они бинарно совместимы?

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

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

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
по какой?
Не задавай глупых вопросов, пожалуйста. Которая у тебя была.
KOPOJI
01.08.2013, 19:08
  #95
 Комментарий модератора 
Заканчиваем полемику.
korvin_
 Аватар для korvin_
1328 / 1099 / 160
Регистрация: 28.04.2012
Сообщений: 3,926
01.08.2013, 19:39     В чём писать? #96
Кузя, да успокойся ты уже:
Миниатюры
В чём писать?  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 23:14     В чём писать?
Еще ссылки по теме:

C++ В чём ошибка?
C++ В чём ошибка?
C++ В чём ошибка?

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

Или воспользуйтесь поиском по форуму:
iel
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 Правил
Yandex
Объявления
01.08.2013, 23:14     В чём писать?
Ответ Создать тему
Опции темы

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