c ++ с использованием 16-битных указателей в 32/64-битных системах - PullRequest
2 голосов
/ 29 ноября 2011

Обычно размер указателя равен «ширине» ЦП, так что указатель обычно может получить доступ к любому системному адресу.

Использование 16-битного указателя в 64-битной системе должно позволить разместить 4 16-битных указателя в той же области памяти, что и один 64-битный указатель, однако 16-битный указатель позволяет адресовать только 2 ^ 16 местоположений.

Моя идея не в экономии памяти, а в потенциальном выигрыше в производительности.Идея в основном состоит в том, чтобы распределить память порциями по 65635 и использовать 16-битные указатели для адресации этих «виртуальных» 16-битных адресных пространств.

Возможно ли это?Должен ли я попытаться сделать это, то есть будет ли это способствовать повышению производительности?

Ответы [ 2 ]

5 голосов
/ 29 ноября 2011

Скорее всего, это будет хит производительности.Современный процессор может легко получить доступ к 32- и 64-битной ширине данных.Если у вас есть 16-битные данные, вам нужно замаскировать и так далее, чтобы вычислить реальный адрес в CPU.

Указатель для дальнейшего чтения - это невыровненный доступ.

2 голосов
/ 29 ноября 2011

Скорее всего, если у вас есть 32/64-битная система, у нее достаточно оперативной памяти, чтобы преимущества оптимизации вашей схемы были перевешены сложностью ее реализации.Вам нужно убедиться, что он работает правильно, и ваша схема будет работать намного медленнее, чем прямой доступ с указателем.

...