Search code examples
memorykernelx86-6432bit-64bit

How will 64 bit variable be referenced in a 32 bit process?


I have a 64 bit kernel and i run 32 bit processes in userland.In the user process code ,if i declare a 64 bit variable ,how will it be referred.Will it incur 2 memory reads.? basically the scenario is: I need to use a 64 bit mask in my user process. Approach 1 : -> Use a u64bits variable. Approach -> Use a array of 2 32 bit variables.


Solution

  • First off: the kernel has no bearing on the answer to this question.

    Second, I assume this is x86 you're talking about. Where possible, the compiler will place 64-bit values across 2 32-bit registers. For example, if you return a uint64_t from a function, the low 32 bits will be stored in the eax register, and the high bits will be in edx.

    The compiler will generally do the right thing for performance and correctness: using an array will likely just confuse it and lead to worse results.

    By the way, x86-64 CPUs will normally perform reads of 2 adjacent 32-bit words at the same speed as a single 64-bit read. The advantages of 64-bit mode are that arithmetic can be done directly on 64-bit values (1 64x64 multiplication instruction vs 3-4 32x32 instructions), there is much more space available in registers (16 registers instead of 8, registers are twice as wide), and of course the larger possible virtual address space.