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