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

C++

Войти
Регистрация
Восстановить пароль
 
 
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 128
#1

На что влияет правильный выбор типа данных? - C++

09.06.2016, 11:05. Просмотров 723. Ответов 32
Метки нет (Все метки)

Вопрос банальный. Предлагаю некий мозговой штурм. Сам не очень владею этой темой.

Код работает с целыми числами. Для целых чисел в с++ разработан целый набор типов для конкретных задач. На что может повлиять выбор того или иного типа?
Если я работаю с числами до 1000, то например, можно использовать short int и unsigned short int и int. При этом логично использовать short int в целях экономии памяти. Но не проиграю ли я в производительности? Что очень важно.

Заранее спасибо за аргументированные мысли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2016, 11:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос На что влияет правильный выбор типа данных? (C++):

Ошибка что то типа не объявленный идентификатор,и типа невозможно преобразовать CStringW в там что..то - C++
Даже не знаю как сказать... короче есть база а Access,которую я подключил к проекту MFC,и в этой базе всего одно поле с текстовым типом...

Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур - C++
Сабж. Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур или... пободного рода простых для восприятия...

Как сделать что бы в listbox было типа заголовков, а в ValueListEditor содержание(что то типа бд) - C++ Builder
Как сделать что бы в listbox было типа заголовков, а в ValueListEditor содержание?

Выбор верного типа данных - C++
Здравствуйте! У меня такой вопрос, если я хочу использовать в программе число 10^-9, то какой тип мне для этого надо использовать? ...

Правильный выбор типа данных - VBA
Помогите ,пожалуйста, выбрать тип данных. Считаем уравнение.:wall: Sub lab() Dim y As Currency Dim k As Integer Dim m As Integer ...

Как организовать правильный выбор данных из таблицы? - C# MVC
Здравствуйте господа программисты :-) Имеется сложность с выбором данных из таблицы. Есть представление @model...

32
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 128
10.06.2016, 11:07  [ТС] #16
Расскажите на пальцах, как длина кода влияет на скорость?
Я начинал читать книгу, но пока отложил из важности других задач. Там рассказывалось, что исполняемый код помещается в кэш процессора, от сюда я и подумал, что чем меньше код, тем больше его туда поместится и быстрее будет алгоритм.
Сильно не смейтесь над моей мыслью, я тут (в этой области знаний) явно не авторитет.
0
_liv_
229 / 229 / 86
Регистрация: 07.10.2015
Сообщений: 639
Завершенные тесты: 1
10.06.2016, 12:11 #17
karat39, в общем-то, по большому счету, не стоит заморачиваться на оптимизации каждой команды...
Хоть это и может дать эффект, но весьма незначительный. Т.к. кэш процессора весьма существенно сглаживает
все эти мелкие потери.
Можно немного убыстрить, если стараться меньше работать непосредственно с памятью, а больше с регистрами, такие команды и размером меньше, и быстрее работают. Но это обеспечивают, по крайней мере, должны, оптимизаторы кода.
А вот сосредоточиться максимально на оптимизации алгоритма стоит. Именно здесь обычно самые большие потери времени. Т.к. кэш тут не поможет, да и оптимизаторы, скорее всего, тоже. Можно так накрутить, что, будут делаться элементарно лишние вычисления... Или, как пример, если в наличии много ветвлений, то это заставит процессор постоянно перестраивать кэш, тем самым уменьшая выгоду от кэша и, соответственно, увеличивая время работы. Правда, оптимизаторы и с ветвлениями тоже пытаются справляться. Но все же...
И наконец, если передо мной стоит задача написать что-то действительно быстро работающее, я пишу полностью на Ассемблере
Я не надеюсь на оптимизаторы, а пишу так, как мне надо
Но таких задач на современных компьютерах уже практически нет
0
Nick Alte
Эксперт С++
1640 / 1012 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
12.06.2016, 18:49 #18
Цитата Сообщение от _liv_ Посмотреть сообщение
Я не надеюсь на оптимизаторы, а пишу так, как мне надо
И измерения показывают, что получается таки лучше, чем у оптимизаторов? Если да, то на сколько процентов? Если измерения не производились, то как знать, что получается вообще лучше, а не хуже?
0
_liv_
229 / 229 / 86
Регистрация: 07.10.2015
Сообщений: 639
Завершенные тесты: 1
13.06.2016, 10:27 #19
Nick Alte, Вы знаете, лично мне не требуется проводить измерения. Мой 30-летний опыт рассматривания всевозможного кода под микроскопом говорит о том, что никогда не сделать автоматом так, как можно сделать ручками.
Безусловно, оптимизаторы неплохо компонуют код, особенно, если код хорошо написан. Но все равно, человек, хорошо знающий Ассемблер, сделает лучше. Я говорю не об отдельных вставках и фрагментах, а обо всем приложении в целом.
Я, разумеется, не призываю всех писать на асме, нужды нет, да и не каждому это дано. Сейчас для современных компьютеров более, чем достаточно, ЯВУ с оптимизаторами, да и неоптимизированные программы вполне сносно работают
А вот для контроллеров, где ресурсов не так много, лично я пишу исключительно на асме.
0
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,294
Завершенные тесты: 1
13.06.2016, 11:03 #20
Цитата Сообщение от _liv_ Посмотреть сообщение
Вы знаете, лично мне не требуется проводить измерения.
А еще лично вам не нужно ничего тестировать, потому что ваш код всегда работает. Сразу вспоминается Чак Норрис программирования - Джефф Дин
"Джефф Дин компилирует и запускает свой код перед коммитом, но только чтобы проверить на баги компилятор и CPU".

Цитата Сообщение от _liv_ Посмотреть сообщение
Но все равно, человек, хорошо знающий Ассемблер, сделает лучше.
А когда он сделает лучше, его сразу уволят, потому что все дедлайны пройдут. Есть такая вероятность. Нерационально тратить много человеческих ресурсов там, где еще не выяснили, что это нужно.

Цитата Сообщение от _liv_ Посмотреть сообщение
А вот для контроллеров, где ресурсов не так много, лично я пишу исключительно на асме.
А у нас и тут плюсы - и все норм!
1
_liv_
229 / 229 / 86
Регистрация: 07.10.2015
Сообщений: 639
Завершенные тесты: 1
13.06.2016, 11:14 #21
Цитата Сообщение от ct0r Посмотреть сообщение
А еще лично вам не нужно ничего тестировать, потому что ваш код всегда работает
ct0r, не утрируйте... Отладку и тестирование никто не отменял Речь же идет о другом...
Цитата Сообщение от ct0r Посмотреть сообщение
А когда он сделает лучше, его сразу уволят, потому что все дедлайны пройдут
У каждого своя позиция... Я свою Вам не навязываю...
Цитата Сообщение от ct0r Посмотреть сообщение
А у нас и тут плюсы - и все норм!
Можно обойтись и плюсами. Только вот мои программки работают минимум в полтора раза производительнее. Очень часто размер кода и время работы весьма критичны... Опять же я не навязываю свой подход... Пишите себе на плюсах...
0
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,294
Завершенные тесты: 1
13.06.2016, 11:25 #22
Цитата Сообщение от _liv_ Посмотреть сообщение
Только вот мои программки работают минимум в полтора раза производительнее.
Производительнее тех же самых ваших на плюсах? То есть были все-таки замеры или как?
0
_liv_
229 / 229 / 86
Регистрация: 07.10.2015
Сообщений: 639
Завершенные тесты: 1
13.06.2016, 11:47 #23
Цитата Сообщение от ct0r Посмотреть сообщение
Производительнее тех же самых ваших на плюсах?
После того, как я имел удовольствие рассмотреть чужие программы в виде кода, не хочется и пробовать. Тем более, я на асме пишу ничуть не медленнее, чем мог бы писать на С. Мне на каждый проект хватает от пары дней до пары недель, в зависимости от сложности, это вместе с размышлением, как сделать, и с отладкой. И это не простые "моргалки"
А производительность видна как по коду, так и по тому, что программа успевает сделать.
0
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 128
13.06.2016, 15:40  [ТС] #24
Цитата Сообщение от _liv_ Посмотреть сообщение
Вы знаете, лично мне не требуется проводить измерения. Мой 30-летний опыт рассматривания всевозможного кода под микроскопом говорит о том, что никогда не сделать автоматом так, как можно сделать ручками.
вот я столкнулся с таким моментом. Хочу обогнать копирование памяти, либо строк (memcpy или strcpy). Логикой понимаю, что strcpy должен работать долго, пока проверит завершающий ноль, а если еще и и побайтно копирует, то точно можно обогнать. Для эксперимента делаю:
Создаю структуру данных, кратную кол-во байт стандратному типу ассемблера. Ну пусть это будет например 16 байт (16 / DD = 4).
проверяю отдельно memcpy, strcpy, ассемблер MOVSD (на 4 итерации)

Ну никак руками обогнать не могу. Может опыта не хватает.
0
_liv_
229 / 229 / 86
Регистрация: 07.10.2015
Сообщений: 639
Завершенные тесты: 1
13.06.2016, 16:30 #25
karat39, например, с ходу, memcopy
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
proc    _memcopy lpDst:DWORD, lpSrc:DWORD, dSize:DWORD
        pusha
 
        ; Установить указатели на источник и приемник
        cld
        mov     edi,[lpDst]
        mov     esi,[lpSrc]
 
        mov     ecx,[dSize]
        push    ecx
        ; Разделить на 4 и получить длину в DWORD
        shr     ecx,2
        ; Скопировать основную часть строки DWORD'ами
        rep     movsd
        pop     ecx
        ; Получить остаток от деления на 4
        and     ecx,3
        ; Скопировать остаток строки байтами
        rep     movsb
 
        popa
        ret
endp
Добавлено через 3 минуты
lstrlen
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
proc    _lstrlen lpStr:DWORD
        mov     eax, [lpStr]
        sub     eax, 4
@@:
        add     eax, 4
        cmp     byte [eax], 0
        je       szlen_lb1
        cmp     byte [eax+1], 0
        je       szlen_lb2
        cmp     byte [eax+2], 0
        je       szlen_lb3
        cmp     byte [eax+3], 0
        jne     @b
        sub     eax, [lpStr]
        add     eax, 3
        ret
szlen_lb3:
        sub     eax, [lpStr]
        add     eax, 2
        ret
szlen_lb2:
        sub     eax, [lpStr]
        add     eax, 1
        ret
szlen_lb1:
        sub     eax, [lpStr]
        ret
endp
1
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
13.06.2016, 16:30 #26
Потому что многие современные реализации учитывают поддержку тех или иных инструкций процессором. Вполне могут использоваться sse/avx регистры для этого. На крайний случай, если система x86_64 ( как и программа ), то будут использоваться 64 битные регистры.
0
_liv_
229 / 229 / 86
Регистрация: 07.10.2015
Сообщений: 639
Завершенные тесты: 1
13.06.2016, 16:31 #27
lstrcpy
Assembler
1
2
3
4
5
6
7
8
9
10
proc    _lstrcpy lpDst:DWORD, lpSrc:DWORD
        pusha
 
        stdcall _lstrlen,[lpSrc]
        inc     eax
        stdcall _memcopy,[lpDst],[lpSrc],eax
 
        popa
        ret
endp
0
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 128
13.06.2016, 18:02  [ТС] #28
Цитата Сообщение от _liv_ Посмотреть сообщение
karat39, например, с ходу, memcopy
спасибо, чуть позже обязательно замерю

Добавлено через 1 минуту
Цитата Сообщение от Toshkarik Посмотреть сообщение
Потому что многие современные реализации учитывают поддержку тех или иных инструкций процессором. Вполне могут использоваться sse/avx регистры для этого. На крайний случай, если система x86_64 ( как и программа ), то будут использоваться 64 битные регистры.
кстати старожилы форума мне посоветовали присмотреться к немцу Фогу. Он как раз на ассме реализует через особенности intel. Там он как раз и sse и avx использует. Хороший у него вообще сайт по оптимизации. agner.org
0
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,294
Завершенные тесты: 1
13.06.2016, 18:51 #29
Цитата Сообщение от _liv_ Посмотреть сообщение
После того, как я имел удовольствие рассмотреть чужие программы в виде кода, не хочется и пробовать
Цитата Сообщение от _liv_ Посмотреть сообщение
А производительность видна как по коду, так и по тому, что программа успевает сделать.
Ага, ну в общем я понял, как вы производительность сравниваете

Цитата Сообщение от _liv_ Посмотреть сообщение
Тем более, я на асме пишу ничуть не медленнее, чем мог бы писать на С.
Ну так плюсы не виноваты, что вы так на них пишете. И вообще почитайте гайды http://agner.org/optimize/ (тут его уже упоминали) - там все очень подробно разъясняется, включая то, что самый оптимальный путь - написать максимум на С/С++, все померить, оптимизировать нужные С/С++ части, а только потом смотреть сгенерированный ассемблерный код и отталкиваться от него при дальнейшей оптимизации.
0
_liv_
229 / 229 / 86
Регистрация: 07.10.2015
Сообщений: 639
Завершенные тесты: 1
13.06.2016, 19:32 #30
Цитата Сообщение от ct0r Посмотреть сообщение
Ну так плюсы не виноваты, что вы так на них пишете
Писал и на С... И насмотрелся на получаемый код Наверное, я тоже перфекционист, люблю, чтобы код был красивый. И вообще, каждый выбирает себе тот инструмент, который ему по вкусу... Зачем мне писать на плюсах? Когда я на асме пишу быстрее и получаю код такой, какой я хочу...
Цитата Сообщение от ct0r Посмотреть сообщение
самый оптимальный путь
У каждого своё мерило На вкус и цвет товарища нет...
Я пишу сразу на асме, минуя все промежуточные этапы. Получается оптимально и быстро
Цитата Сообщение от ct0r Посмотреть сообщение
как вы производительность сравниваете
Знаете, мой опыт программирования дает мне возможность, глядя на hex, увидеть все сильные и слабые стороны кода Плюс осциллограф, неизменный друг "железячного" программиста...
0
13.06.2016, 19:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2016, 19:32
Привет! Вот еще темы с ответами:

Выбор типа базы данных - C#
Лирическая часть. В университете получил тему на доклад: "Тенденції в утворенні складних слів.", для того что-бы сделать выводы надо...

Выбор типа источника данных - Visual C++ БД
Работаю в Visual Studio 2008. При попытке выбрать тип источника данных на вкладке "Data Source Configuration Wizard" отсутствуют ...

Выбор типа данных пользователем во время работы программы - C#
Работаю с формами, хочется сделать выбор пользователем типа данных во время работы. Собственно вопрос, можно ли сделать так что бы...

Выбор типа данных VBA при сравнении нецелых чисел - VBA
Добрый день! Подскажите, плз., какой тип данных выбрать если необходимо сравнить нецелые числа между собой и произвести с ними...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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