Я пишу кроссплатформенный код x86 / x86-64 / Itanium, ориентированный на высокую производительность, и хотел бы избежать каких-либо ненужных операций, включая ненужное приведение типов.
Код, который у меня есть, вызывает такую функцию, какthis:
int theResult = Function(anUInt, 10);
Очевидно, тип значения 10
не указан.И Function
определяется следующим образом:
int Function (unsigned int anUInt, int anInt)
{
// ...
}
Я предполагаю, что при использовании VC ++ и GCC для машин x86 размер целочисленного литерала составляет 4 байта, поэтому преобразование типов выполнять не нужно.при присвоении значения 10
параметру anInt
при входе в указанную выше функцию (размер значения int
равен 4 почти во всех моделях данных).Некоторые могут не считать это окончательным доказательством этого предположения, но sizeof(1)
возвращает 4 в VC ++ и коде GCC, скомпилированном для архитектуры x86.И я предполагаю, что если бы размер целочисленного литерала на 64-битной машине был, скажем, 8 байтов, 8 байтов значения 10
пришлось бы преобразовать в 4 байта параметра anInt
, что снизило бы производительность, если быFunction
вызывается очень часто (как в моей программе).
Таким образом, размер целочисленного литерала будет равен 4 в VC ++, а код GCC скомпилирован для 64-битной архитектуры, например, x86-64или итаниум, или будет 8?Другими словами, что вернет sizeof(1)
в коде VC ++ и GCC для 64-битных машин?Какие-нибудь особые случаи для архитектуры Itanium (IA-64)?
Редактировать: изменено "нетипизированное целое число" на "целочисленное литеральное".