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

C++

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

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

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

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

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

Заранее спасибо за аргументированные мысли.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2016, 11:05     На что влияет правильный выбор типа данных?
Посмотрите здесь:
C++ Выбор верного типа данных
C++ Builder Как сделать что бы в listbox было типа заголовков, а в ValueListEditor содержание(что то типа бд)
Ошибка что то типа не объявленный идентификатор,и типа невозможно преобразовать CStringW в там что..то C++
На что влияет разрядность библиотеки? C++
C++ На что влияет расположение строчки using namespace std; ?
C++ Локальная переменная влияет на отображение глобальной, что делать?
C++ Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 594
Завершенные тесты: 1
13.06.2016, 11:14     На что влияет правильный выбор типа данных? #21
Цитата Сообщение от ct0r Посмотреть сообщение
А еще лично вам не нужно ничего тестировать, потому что ваш код всегда работает
ct0r, не утрируйте... Отладку и тестирование никто не отменял Речь же идет о другом...
Цитата Сообщение от ct0r Посмотреть сообщение
А когда он сделает лучше, его сразу уволят, потому что все дедлайны пройдут
У каждого своя позиция... Я свою Вам не навязываю...
Цитата Сообщение от ct0r Посмотреть сообщение
А у нас и тут плюсы - и все норм!
Можно обойтись и плюсами. Только вот мои программки работают минимум в полтора раза производительнее. Очень часто размер кода и время работы весьма критичны... Опять же я не навязываю свой подход... Пишите себе на плюсах...
ct0r
Игогошка!
1768 / 670 / 42
Регистрация: 19.08.2012
Сообщений: 1,284
Завершенные тесты: 1
13.06.2016, 11:25     На что влияет правильный выбор типа данных? #22
Цитата Сообщение от _liv_ Посмотреть сообщение
Только вот мои программки работают минимум в полтора раза производительнее.
Производительнее тех же самых ваших на плюсах? То есть были все-таки замеры или как?
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 594
Завершенные тесты: 1
13.06.2016, 11:47     На что влияет правильный выбор типа данных? #23
Цитата Сообщение от ct0r Посмотреть сообщение
Производительнее тех же самых ваших на плюсах?
После того, как я имел удовольствие рассмотреть чужие программы в виде кода, не хочется и пробовать. Тем более, я на асме пишу ничуть не медленнее, чем мог бы писать на С. Мне на каждый проект хватает от пары дней до пары недель, в зависимости от сложности, это вместе с размышлением, как сделать, и с отладкой. И это не простые "моргалки"
А производительность видна как по коду, так и по тому, что программа успевает сделать.
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 74
13.06.2016, 15:40  [ТС]     На что влияет правильный выбор типа данных? #24
Цитата Сообщение от _liv_ Посмотреть сообщение
Вы знаете, лично мне не требуется проводить измерения. Мой 30-летний опыт рассматривания всевозможного кода под микроскопом говорит о том, что никогда не сделать автоматом так, как можно сделать ручками.
вот я столкнулся с таким моментом. Хочу обогнать копирование памяти, либо строк (memcpy или strcpy). Логикой понимаю, что strcpy должен работать долго, пока проверит завершающий ноль, а если еще и и побайтно копирует, то точно можно обогнать. Для эксперимента делаю:
Создаю структуру данных, кратную кол-во байт стандратному типу ассемблера. Ну пусть это будет например 16 байт (16 / DD = 4).
проверяю отдельно memcpy, strcpy, ассемблер MOVSD (на 4 итерации)

Ну никак руками обогнать не могу. Может опыта не хватает.
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 594
Завершенные тесты: 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
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
13.06.2016, 16:30     На что влияет правильный выбор типа данных? #26
Потому что многие современные реализации учитывают поддержку тех или иных инструкций процессором. Вполне могут использоваться sse/avx регистры для этого. На крайний случай, если система x86_64 ( как и программа ), то будут использоваться 64 битные регистры.
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 594
Завершенные тесты: 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
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 74
13.06.2016, 18:02  [ТС]     На что влияет правильный выбор типа данных? #28
Цитата Сообщение от _liv_ Посмотреть сообщение
karat39, например, с ходу, memcopy
спасибо, чуть позже обязательно замерю

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

Цитата Сообщение от _liv_ Посмотреть сообщение
Тем более, я на асме пишу ничуть не медленнее, чем мог бы писать на С.
Ну так плюсы не виноваты, что вы так на них пишете. И вообще почитайте гайды http://agner.org/optimize/ (тут его уже упоминали) - там все очень подробно разъясняется, включая то, что самый оптимальный путь - написать максимум на С/С++, все померить, оптимизировать нужные С/С++ части, а только потом смотреть сгенерированный ассемблерный код и отталкиваться от него при дальнейшей оптимизации.
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 594
Завершенные тесты: 1
13.06.2016, 19:32     На что влияет правильный выбор типа данных? #30
Цитата Сообщение от ct0r Посмотреть сообщение
Ну так плюсы не виноваты, что вы так на них пишете
Писал и на С... И насмотрелся на получаемый код Наверное, я тоже перфекционист, люблю, чтобы код был красивый. И вообще, каждый выбирает себе тот инструмент, который ему по вкусу... Зачем мне писать на плюсах? Когда я на асме пишу быстрее и получаю код такой, какой я хочу...
Цитата Сообщение от ct0r Посмотреть сообщение
самый оптимальный путь
У каждого своё мерило На вкус и цвет товарища нет...
Я пишу сразу на асме, минуя все промежуточные этапы. Получается оптимально и быстро
Цитата Сообщение от ct0r Посмотреть сообщение
как вы производительность сравниваете
Знаете, мой опыт программирования дает мне возможность, глядя на hex, увидеть все сильные и слабые стороны кода Плюс осциллограф, неизменный друг "железячного" программиста...
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
14.06.2016, 11:08     На что влияет правильный выбор типа данных? #31
Цитата Сообщение от _liv_ Посмотреть сообщение
karat39, например, с ходу, memcopy .......
Кхм. Ты всерьез считаешь такую реализацию оптимальной?
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 74
14.06.2016, 11:32  [ТС]     На что влияет правильный выбор типа данных? #32
Цитата Сообщение от CheshireCat Посмотреть сообщение
Кхм. Ты всерьез считаешь такую реализацию оптимальной?
к сожалению, пока не хватает знаний думать более широко, с удовольствием выслушаю критику.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 13:26     На что влияет правильный выбор типа данных?
Еще ссылки по теме:
C++ Какой тип данных правильный при определении времени выполнения?
Выбор типа проекта C++ Builder
C++ Выбор подходящего целочисленного типа по ёмкости
как сделать что бы когда нажал выбор кокого нить пункта, а он выделялся и с помощью Enter я подтверждаю что выбираю C++
C++ Выбор типа переменной-члена класса в зависимости от параметров передаваемых конструктору

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

Или воспользуйтесь поиском по форуму:
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 594
Завершенные тесты: 1
14.06.2016, 13:26     На что влияет правильный выбор типа данных? #33
CheshireCat, я ж сказал, навскидку, что пришло в голову
Сейчас совершенно нет времени заниматься искусством
Безусловно, нет предела совершенству. Я вполне допускаю еще более оптимального варианта.
В том и прелесть Ассемблера, что можно творить, как хочешь

CheshireCat, сказав А, говори Б Предложи свой вариант, посмотрим, посчитаем...
Только без SSE etc. Исключительно средствами 32-битной системы.
Yandex
Объявления
14.06.2016, 13:26     На что влияет правильный выбор типа данных?
Ответ Создать тему
Опции темы

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