LINUX.ORG.RU

Какой стандарт С++ изучать?

 ,


1

2

Меня сломала жизнь и я решил таки вызубрить какую-нибудь книженцию трупострауса. Только вот какую взять? Стандарт какого года в данный момент наиболее востребован? Про сиху можно с уверенностью сказать, что изучив 90 и взяв некоторые фичи 99, ты на коне. А как с этим в плюсах?

★★★★

Ответ на: комментарий от emulek

Например, входим в обработчик прерывания по изменению лог. ур. на каком-либо выводе: на asm просто работаем со свободными регистрами, гцц же сначала положит содержимое регистров в стек (прощайте такты), только потом обработает событие (регистр-регистр - 1 такт, pop/push > 1) и, в завершение, достанет сохраненное из стека (опять потери тактов).

*недо-МК с одним аккумулятором вместо банка регистров в расчет не берем

Old_Hamster ★★★
()
Ответ на: комментарий от Old_Hamster

asm просто работаем со свободными регистрами, гцц же сначала положит содержимое регистров в стек

что-то ты не так сделал. Класть точно не станет.

регистр-регистр - 1 такт, pop/push > 1

там не pop. там что-то типа mov eax, [ebp+17]. Причём в конвейере и с хитрым кешированием регистров. Я не понимаю эту магию от intel(amd), но она работает, если ручками распихать, получается медленнее. Регистров только с виду немного, там внутри их Over9000. Они систему команд берегут, что-бы код для i8086 работал. И работает ЧСХ. В интеле же пробовали поломать совместимость(man IA-64), и что получилось? Вот и извращаются как могут.

emulek
()
Ответ на: комментарий от emulek

что-то ты не так сделал

ISR(INT0_vect)
{
    volatile unsigned char a, b;
    a = 2 + 3;
    b = a * 4;
}
@00000023: __vector_1
5:        {
+00000023:   921F        PUSH      R1             Push register on stack
+00000024:   920F        PUSH      R0             Push register on stack
+00000025:   B60F        IN        R0,0x3F        In from I/O location
+00000026:   920F        PUSH      R0             Push register on stack
+00000027:   2411        CLR       R1             Clear Register
+00000028:   938F        PUSH      R24            Push register on stack
+00000029:   93DF        PUSH      R29            Push register on stack
+0000002A:   93CF        PUSH      R28            Push register on stack
+0000002B:   D000        RCALL     PC+0x0001      Relative call subroutine
+0000002C:   B7CD        IN        R28,0x3D       In from I/O location
+0000002D:   B7DE        IN        R29,0x3E       In from I/O location
7:            a = 2 + 3;
+0000002E:   E085        LDI       R24,0x05       Load immediate
+0000002F:   8389        STD       Y+1,R24        Store indirect with displacement
8:            b = a * 4;
+00000030:   8189        LDD       R24,Y+1        Load indirect with displacement
+00000031:   0F88        LSL       R24            Logical Shift Left
+00000032:   0F88        LSL       R24            Logical Shift Left
+00000033:   838A        STD       Y+2,R24        Store indirect with displacement
9:        }
+00000034:   900F        POP       R0             Pop register from stack
+00000035:   900F        POP       R0             Pop register from stack
+00000036:   91CF        POP       R28            Pop register from stack
+00000037:   91DF        POP       R29            Pop register from stack
+00000038:   918F        POP       R24            Pop register from stack
+00000039:   900F        POP       R0             Pop register from stack
+0000003A:   BE0F        OUT       0x3F,R0        Out to I/O location
+0000003B:   900F        POP       R0             Pop register from stack
+0000003C:   901F        POP       R1             Pop register from stack
+0000003D:   9518        RETI                     Interrupt return

intel(amd)

тут у нас нить о gcc для МК ;)

Old_Hamster ★★★
()
Последнее исправление: Old_Hamster (всего исправлений: 1)
Ответ на: комментарий от Old_Hamster

PUSH R1

не оптимально, да. Видать gcc считает, что функция будет достаточно длинной, и регистров не жалеет.

тут у нас нить о gcc для МК

ну либо не делай таких тривиальных функций, либо не юзай gcc.

OUT 0x3F,R0

а это куда?

ЗЫЖ оберни в цикл не саму функцию, а внутренности. Так более реалистично, да и PUSH/POP станут бесплатными.

emulek
()
Последнее исправление: emulek (всего исправлений: 1)
Ответ на: комментарий от sspzd

По сути нет)

Но такой код нужно привыкнуть читать, потому как на первый взгляд он производит впечатление brainfuck'a.

Twissel ★★★★★
()
Ответ на: комментарий от Old_Hamster

Это проблемы тех, кто использует процессоры intel/amd на МК. Что сейчас мешает взять MIPS или ARM? Причем последний рулит и педалит по всем параметрам.

unt1tled ★★★★
() автор топика

у многих как раз сейчас происходит переезд на с++11/14 (14 — багфикс 11, если что). т.е. с вероятностью около 50% ты попадёшь либо на 98/03, либо на 11/14.

anonymous
()

Наверное, можешь начинать сразу с c++14 и дальше. К моменту когда ты всё осилишь, многие фичи его будут уже имплементированы в компиляторах.

invy ★★★★★
()
Ответ на: комментарий от Deleted

в следующий раз насри себе в тарелку и не выноси из дома на общее обозрение

anonymous
()
Ответ на: комментарий от unt1tled
  • всего 12 регистров
  • нет аналогов sbi/cbi
  • нет инструкций перехода по состоянию бита портов ввода/вывода
  • по прерыванию прячет в стек r0-r3, r12 (кто просил?)
  • в даташите нет привязки инструкций к тактам
Old_Hamster ★★★
()
Ответ на: комментарий от Old_Hamster

скорость/энергопотребление/простота написания и отладки ассемблера от этого страдают? тото же

а работать с x86 — рак

unt1tled ★★★★
() автор топика
Последнее исправление: unt1tled (всего исправлений: 1)
Ответ на: комментарий от unt1tled

x86

Ничего, что в этой нити обсуждают применимость c/c++ для avr/младших_arm?

скорость/энергопотребление/простота написания и отладки ассемблера от этого страдают?

Это превращает МК в процессор общего назначения. И вообще, читай ветку, прежде чем что-то отвечать.

Old_Hamster ★★★
()
Последнее исправление: Old_Hamster (всего исправлений: 1)
Ответ на: комментарий от Old_Hamster

мк головного мозга?

ты рассказываешь тс-у что он здесь обсуждает?

anonymous
()
Ответ на: комментарий от invy

Судя по вики, отличия местами побольше, чем «устраняет косяки»...

ovk48 ★★★
()
20 января 2016 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.