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++. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x