ОС AIX 5.3. Существует ли способ проверить на какой системе (32-битной или 64-битной) я нахожусь?
Способ
cout << sizeof(int) << endl;
понятен, но интересует прежде всего возможность получения этой информации с помощью каких-то утилит операционной системы.
Спасибо.
Здравствуйте, halka, Вы писали:
H>ОС AIX 5.3. Существует ли способ проверить на какой системе (32-битной или 64-битной) я нахожусь?
H>Способ
H>H> cout << sizeof(int) << endl;
H>
H>понятен, но интересует прежде всего возможность получения этой информации с помощью каких-то утилит операционной системы.
sizeof() — не катит
uname -p
Здравствуйте, DerBober, Вы писали:
$ uname -p
powerpc
Здравствуйте, halka, Вы писали:
H>Здравствуйте, DerBober, Вы писали:
H>H>$ uname -p
H>powerpc
H>
uname -a
H>Способ
H>H> cout << sizeof(int) << endl;
H>
H>понятен, но интересует прежде всего возможность получения этой информации с помощью каких-то утилит операционной системы.
А что из этого примера следует?
sizeof(int) подставляет компилятор во время компиляции.
При использовании gcc для 64 битовых платформ sizeof(int) равен 4.
MS>А что из этого примера следует?
MS>sizeof(int) подставляет компилятор во время компиляции.
MS>При использовании gcc для 64 битовых платформ sizeof(int) равен 4.
А как же ILP64 ? там int 64битный

см. таблицу по ссылке:
http://www.ibm.com/developerworks/ru/library/l-port64/index.html
Здравствуйте, halka, Вы писали:
H>Здравствуйте, DerBober, Вы писали:
H>H>$ uname -p
H>powerpc
H>
Не повезло
Здравствуйте, Аноним, Вы писали:
MS>>А что из этого примера следует?
MS>>sizeof(int) подставляет компилятор во время компиляции.
MS>>При использовании gcc для 64 битовых платформ sizeof(int) равен 4.
А>А как же ILP64 ? там int 64битный
см. таблицу по ссылке:
А>http://www.ibm.com/developerworks/ru/library/l-port64/index.html
В компиляторах gcc которыми пользуюсь я для компиляции модулей для 64 битной платформы используется модель LP64
Здравствуйте, halka, Вы писали:
H>ОС AIX 5.3. Существует ли способ проверить на какой системе (32-битной или 64-битной) я нахожусь?
H>Способ
H>H> cout << sizeof(int) << endl;
H>
H>понятен, но интересует прежде всего возможность получения этой информации с помощью каких-то утилит операционной системы.
H>Спасибо.
А почему нельзя написать простой скрипт, который:
1. Создаст простой C файл:
int main(int argc,char* argv[])
{
printf("%d\n", sizeof(void*)); /* sizeof(int) не катит - он всегда == 4 байта */
return 0;
}
2. Откомпилирует его
3. Запустит.
Все это несколько строк. CMake для определения разрядности — именно так и делает (вроде бы

)
Здравствуйте, Аноним, Вы писали:
MS>>А что из этого примера следует?
MS>>sizeof(int) подставляет компилятор во время компиляции.
MS>>При использовании gcc для 64 битовых платформ sizeof(int) равен 4.
А>А как же ILP64 ? там int 64битный
см. таблицу по ссылке:
А>http://www.ibm.com/developerworks/ru/library/l-port64/index.html
Думал что гоню — на практике всегда было sizeof(int) == 4 байта.
Пошел по вашей ссылке посмотрел. Там написано следующее:
...
* Если вам нужны переменные размером 32 бита на обеих системах, определите их как int.
* Если переменная должна иметь длину 32 бита на 32-разрядных системах и 64 бита на 64-разрядных системах, объявите ее как long.
...
Единственно что там написано, что выравнивание будет по 64 бита, а размерность все равно 32 бита.
Здравствуйте, halka, Вы писали:
H>ОС AIX 5.3. Существует ли способ проверить на какой системе (32-битной или 64-битной) я нахожусь?
H>Способ
H>H> cout << sizeof(int) << endl;
H>
H>понятен, но интересует прежде всего возможность получения этой информации с помощью каких-то утилит операционной системы.
H>Спасибо.
uname -m
Спасибо всем ответившим.
На ОС AIX есть две утилиты: bootinfo и lsconf. Первая к сожалению требует рутовых прав и запустить ее я не смог. Вторая среди прочего вывела:
Kernel Type: 64-bit
Однако хочу заметить, что на некоторых Юниксах 64-битное ядро способно выполнять 32-битные приложения (что-то вроде режима обратной совместимости). Примером может служить
HP-UX.