checking if machine is 64-bit

S

Suraj Kurapati

Hello,

I am checking if the machine is 64-bit by doing this:

require 'rbconfig'
is_machine_64_bit = ( Config::CONFIG["arch"] =~ /64/ )

Is there a better way?

Thanks.
 
M

Michael Fellinger

Hello,

I am checking if the machine is 64-bit by doing this:

require 'rbconfig'
is_machine_64_bit = ( Config::CONFIG["arch"] =~ /64/ )

Config::CONFIG['arch']
# "x86_64-linux"
Is there a better way?

Not that i know of.

^ manveru
 
D

Daniel Berger

Hello,

I am checking if the machine is 64-bit by doing this:

require 'rbconfig'
is_machine_64_bit = ( Config::CONFIG["arch"] =~ /64/ )

Is there a better way?

if (2**33).kind_of?(Bignum)
# 32 bit
else
# 64 bit
end

Might need some tweaking once the 128 bit operating systems show up...

Regards,

Dan
 
S

Suraj Kurapati

Daniel said:
if (2**33).kind_of?(Bignum)
# 32 bit
else
# 64 bit
end

Excellent idea. However, note that it takes 34 bits to represent 2**33,
and 33 bits to represent 2**32. Thus, we can get away with only checking
whether 2**32 is a Fixnum:

is_machine_64_bit = (2 ** 32).is_a? Fixnum
 
S

Suraj Kurapati

Suraj said:
is_machine_64_bit = (2 ** 32).is_a? Fixnum

Hmm, after reading the ri manpage for Fixnum, I found a better way:

(-1.size) is 4 on a 32-bit machine and 8 on a 64-bit machine.
 
X

Xeno Campanoli

Suraj said:
Hmm, after reading the ri manpage for Fixnum, I found a better way:

(-1.size) is 4 on a 32-bit machine and 8 on a 64-bit machine.
Aren't you gonna get Kernel information for 32 bit if it's a 32 bit
Kernel on a 64 bit machine?
 
L

Lionel Bouton

Suraj said:
Hmm, after reading the ri manpage for Fixnum, I found a better way:

(-1.size) is 4 on a 32-bit machine and 8 on a 64-bit machine.

I don't know if it matters to you, but IIRC there are architectures with
different sizes for integers and memory addresses (64 bit integers with
32 bit addresses if memory serves).

Lionel.
 
N

Nobuyoshi Nakada

Hi,

At Sun, 29 Jul 2007 02:42:46 +0900,
Suraj Kurapati wrote in [ruby-talk:262297]:
I am checking if the machine is 64-bit by doing this:

require 'rbconfig'
is_machine_64_bit = ( Config::CONFIG["arch"] =~ /64/ )

Is there a better way?

Depends on the purpose.

If you are trying to compile an extension library:

is_machine_64_bit = check_sizeof("int") == 64

is_machine_64_bit = try_static_assert("sizeof int == 64")

or, better in C source(s):

#if SIZEOF_VOIDP == 8

Otherwise, if you want to know the current running platform is
64bit:

is_machine_64_bit = [0].pack("i!").size == 8

Note that all of the above check for the size of int.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,264
Messages
2,571,314
Members
47,993
Latest member
Meri511146

Latest Threads

Top