C++
Как узнать архитектуру C++: разрядность сборки, процессор и архитектура проекта
Запрос «как узнать архитектуру C++» неоднозначный. Обычно пользователь имеет в виду одно из трех:.
Ниже — разделы про проверить архитектуру во время компиляции, проверить размер указателя и проверить настройки сборки, чтобы быстро понять устройство материала, практические ограничения и типовые точки отказа.
Запрос «как узнать архитектуру C++» неоднозначный. Обычно пользователь имеет в виду одно из трех:
- разрядность и платформу сборки: x86, x64, ARM;
- архитектуру процессора, под который собрана программа;
- архитектуру самого проекта: слои, модули, классы, зависимости.
Это разные задачи. В первом случае помогают макросы компилятора и настройки сборки. Во втором — утилиты анализа исполняемого файла. В третьем — чтение структуры проекта и документации
Проверить архитектуру во время компиляции
В C++ можно использовать предопределенные макросы. Они зависят от компилятора и платформы
Пример для Windows/MSVC:
#include <iostream>
int main() {
#if defined(_M_X64) || defined(_WIN64)
std::cout << "x64\n";
#elif defined(_M_IX86)
std::cout << "x86\n";
#elif defined(_M_ARM64)
std::cout << "ARM64\n";
#else
std::cout << "Unknown architecture\n";
#endif
return 0;
}
Для GCC и Clang часто встречаются другие макросы:
#if defined(__x86_64__) || defined(__amd64__)
// x64
#elif defined(__i386__)
// x86
#elif defined(__aarch64__)
// ARM64
#endif
Такой код отвечает на вопрос: под какую архитектуру сейчас компилируется программа
Проверить размер указателя
Иногда нужно быстро понять, 32-битная или 64-битная сборка:
#include <iostream>
int main() {
std::cout << sizeof(void*) * 8 << "-bit\n";
return 0;
}
Если вывод 64-bit, программа собрана как 64-битная. Если 32-bit, сборка 32-битная. Это не заменяет полную проверку платформы, но для разрядности способ простой
Проверить настройки сборки
В Visual Studio архитектура выбирается в конфигурации проекта: например, Win32, x64 или ARM64. В CMake это может задаваться генератором, toolchain-файлом или параметрами компилятора
Если программа ведет себя странно, проверьте:
- какую конфигурацию вы собираете;
- где лежит итоговый
.exe; - не запускаете ли старую сборку из другой папки;
- совпадает ли архитектура библиотек с архитектурой приложения.
Частая ошибка: собрать приложение x64 и подключить библиотеку x86. Такие компоненты вместе не линкуются
Проверить готовый исполняемый файл
Если у вас уже есть .exe или бинарник, архитектуру можно посмотреть внешней утилитой
На Windows для Visual Studio есть dumpbin:
dumpbin /headers app.exe
В выводе ищите информацию о machine type, например x64 или x86
На Linux и macOS часто используют:
file ./app
Команда покажет тип исполняемого файла и архитектуру
Если речь про архитектуру проекта
Иногда под архитектурой имеют в виду не x64, а устройство программы: какие модули есть, где интерфейс, где бизнес-логика, где работа с файлами или базой
Тогда вопрос решается не макросами, а анализом проекта:
- посмотреть структуру папок;
- найти точку входа
main; - выделить классы и зависимости;
- понять, где хранятся данные;
- проверить, как модули вызывают друг друга.
Для маленького учебного проекта архитектура может быть простой: main.cpp, несколько функций и отдельный файл с логикой. Для большого проекта уже нужны слои и границы ответственности
Частые ошибки
Путать архитектуру C++ и архитектуру процессора
C++ — язык. Архитектура x86 или ARM относится к целевой платформе сборки, а не к самому языку
Судить по операционной системе
Если Windows 64-битная, это не значит, что ваша программа обязательно 64-битная. Можно собрать 32-битный .exe на 64-битной системе
Смешивать библиотеки разной разрядности
Приложение x64 должно использовать x64-библиотеки. Приложение x86 — x86-библиотеки
Короткий вывод
Если нужно узнать архитектуру C++ сборки, проверьте макросы компилятора, sizeof(void*) и настройки проекта. Если нужно проверить готовый файл, используйте dumpbin или file. Если речь об архитектуре приложения, анализируйте структуру модулей и зависимостей
Связанные материалы:
Что почитать дальше по C++
Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:
- Как нагрузить процессор на C++: безопасный стресс-тест на ограниченное время
- C++ с нуля: первый файл, переменные и вывод
- Enter в C++: перенос строки, std::endl и ввод через cin
- Microsoft Visual C++ 14.0: что это, зачем нужен и как исправить ошибку установки