Расположение данных для строки паскаля в C ++ - PullRequest
2 голосов
/ 30 марта 2019

Как будет выглядеть наиболее эффективное представление "паскальской строки" в одном байте для размера и максимум 255 символов в C ++:

  1. Структура, содержащая как размер, так и данные:

    struct Content
        {
        uint8_t size;
        std::array<uint8_t, 255> data;
        }; 
    

    При этом данные будут храниться непосредственно в стеке, что должно быть быстрым, но объекты будут занимать некоторое место в стеке, а операции перемещения стоят дорого

  2. A std::unique_ptr<Content> (То же Content, что и в (1)). Требуется дополнительная разыменование для доступа к размеру и данным, но операции перемещения дешевы.

  3. Размещение размера в стеке и данных в куче. Это означает, что легко получить доступ к размеру, а операции перемещения все еще дешевы. Однако 7 байтов теряются из-за заполнения перед указателем на данные. Это было бы похоже на std::vector с фиксированной емкостью, поэтому, вероятно, не очень выходной, или?

1 Ответ

0 голосов
/ 11 мая 2019

Я считаю вариант (1) наиболее естественным подходом.Это дает пользователю возможность хранить данные в стеке, в то время как (2) форсирует использование динамической памяти.

...