Как я могу динамически получить архитектуру системы? - PullRequest
0 голосов
/ 02 ноября 2010

Ну, как говорится в заголовке

, есть ли способ получить системную архитектуру в c ++?

Спасибо!

Ответы [ 5 ]

4 голосов
/ 02 ноября 2010

Исходя из "динамически" и "Visual C ++", я предполагаю, что вы хотите сделать это во время выполнения под Windows.

В этом случае вы можете использовать GetSystemInfo или GetNativeSystemInfo, чтобы получить основную информацию о системе и процессоре. Если вам нужна дополнительная информация о процессоре и конкретных функциях, которые он поддерживает, вы можете использовать IsProcessorFeaturePresent, чтобы найти их (хотя это может быть немного неудобно для этой цели - вы должны спросить о каждой функции в отдельности и дает логический ответ для каждого).

3 голосов
/ 02 ноября 2010

Хороший большой список здесь . Макросы отличаются для Visual Studio и GCC, но просто проверьте, определены ли они с #ifdef.

Что-то вроде:

#if defined(_M_IX86) || defined(__i386__)

Должен предоставить вам GCC, Visual Studio и несколько других.

2 голосов
/ 02 ноября 2010
#if defined(_M_X64)
...
#endif
1 голос
/ 06 февраля 2017

На платформах x64 sizeof(void*) возвращает 8. На платформах x32 sizeof(void*) возвращает 4. Это также должно быть кроссплатформенным.

1 голос
/ 02 ноября 2010

Вы всегда можете смешать несколько строк встроенной сборки и вызвать CPUID для определения процессора, на котором выполняется ваш код.См. Эту статью о том, как это сделать:

http://www.intel.com/Assets/PDF/appnote/241618.pdf

...