Ответы:
Вы можете увидеть, является ли ЦП 64-битным, 32-битным, или способным к обоим, проверив flagsстроку в /proc/cpuinfo. Вы должны знать возможные флаги в вашей архитектурной семье. Например, на платформах i386 / amd64 lmфлаг определяет процессоры с поддержкой amd64 (процессоры, не имеющие этого флага, предназначены только для i386).
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
Вы можете увидеть, является ли ядро 32-битным или 64-битным, запросив архитектуру с помощью uname -m. Например, i[3456]8632-битные, а x86_6464-битные. Обратите внимание, что на некоторых архитектурах 64-битное ядро может запускать 32-битные пользовательские программы, поэтому даже если uname -mпоказано 64-битное ядро, нет гарантии, что 64-битные библиотеки будут доступны.
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
Обратите внимание также, что uname -mможет возвращать «виртуализированное» значение. Например, в Linux, если вы работаете setarch i386 bashв системе amd64 и запускаете uname -mиз этого bash, вы увидите uname -mотчеты i386. Это фактически позволяет вам делать вид, что вы работаете в «32-битной системе», даже если ядро 64-битное, например, для компиляции 32-битных программ без настройки кросс-компиляции.
Вы можете увидеть, что доступно в пользовательском пространстве, запросив поддержку LSB с помощью lsb_releaseкоманды. Точнее, lsb_release -sпечатает :разделенный список поддерживаемых функций LSB. Каждая функция имеет форму . Например, доступность библиотеки ix86 C указывается как , в то время как аналог amd64. Однако не каждый дистрибутив объявляет все доступные модули LSB, поэтому может быть доступно больше, чем можно обнаружить таким образом.module-version-architecturecore-2.0-ia32core-2.0-amd64
Вы можете узнать предпочтительный размер слова для разработки (при условии, что доступен компилятор C), скомпилировав 5-строчную программу C, которая печатает sizeof(void*)или sizeof(size_t).
getconf WORD_BITили getconf LONG_BITвместо того, чтобы скомпилировать свою собственную программу на C (тривиальную и переносимую, хотя это так).
getconfздесь. В принципе это звучит неплохо, но трудно гарантировать, что результаты применимы к конкретному компилятору C, который вы будете использовать, если их несколько (обычно gcc / icc или аналогичный в Linux, gcc / native cc в других местах). В стандартной системе getconfследует применять к c89или c99в $(getconf PATH), но на практике я бы беспокоился о том, чтобы кто-то устанавливал альтернативу, ccкоторой управляет c89оболочка поставщика .
.отсутствует в регулярном выражении: grep '^flags.*:.*\blm\b' /proc/cpuinfo. Также это работает только для меня без -qфлага
.: у меня было «ноль или больше пробелов», но на самом деле есть вкладка. Я также изменил регулярное выражение, чтобы разрешить вкладки. С -qфлагом нет вывода, но состояние выхода команды говорит вам, присутствует ли флаг. Если вы хотите вывод, уберите -qфлаг.
-qфлаг. Тай, работает сейчас :)
Вы можете использовать uname -aи искать, x86_64если вы используете 64-разрядную версию. Все остальное (Насколько я знаю) , и вы используете 32-разрядную или вы на оборудовании , не ПК , такие как alpha, sparcили ppc64.
alpha, sparc64, ppc64, ...
Тип:
uname -a
Если вы получаете, x86_64 GNU/Linuxвы используете 64-битное ядро. Если вы получаете что-то похожее на i386/i486/i586/i686вас, скорее всего, вы используете 32-битное ядро
getconf использует наименьшее количество системных вызовов:
$ strace getconf LONG_BIT | wc -l
253
$ strace arch | wc -l
280
$ strace uname -m | wc -l
281
$ strace grep -q lm /proc/cpuinfo | wc -l
301