Недавно в недавнем интервью я столкнулся с проблемой манипулирования строками и попросил оптимизировать производительность. Мне пришлось использовать итератор для перемещения вперед и назад между символами TCHAR (с поддержкой UNICODE — по 2 байта каждый).
На самом деле не думая о длине массива, я сделал курьезную ошибку, не используя size_t, а int для итерации. Я понимаю, что это несовместимо и небезопасно.
int i, size = _tcslen(str);
for(i=0; i<size; i++){
// code here
}
Но максимальная память, которую мы можем выделить, ограничена. И если существует связь между размерами int и регистра, может быть безопасно использовать целое число.
Например: без каких-либо инструментов виртуального сопоставления мы можем отображать только 2 ^ байта размера регистра. Поскольку TCHAR имеет длину 2 байта, половина этого числа. Для любой системы с 32-битным int это не будет проблемой, даже если вы не используете неподписанную версию int. Люди со встроенным фоном привыкли думать о int как о 16-битном, но размер памяти на таком устройстве будет ограничен. Поэтому мне интересно, есть ли архитектурное решение для тонкой настройки между целыми и регистровыми размерами.