Quote:Why would you do that?
To transfer all 64 bits of a 64 bit address at once?
Edit: Interesting. You made me read a lot deeper into this subject to make sure I had my facts straight. Apparently x64 applications do use 64 bit virtual addresses but the cpu is only designed to use 48 of those bits in translation. Windows allows applications to use 44 of those bits and linux allows applications to use 47 of those bits, the OS will throw an exception if an application tries to use an address outside of the range. The physical address size/address bus may or may not be 64 bits wide but it has to be at least 48 bits at the minimum, I'm seeing 52 bits for AMD cpus but I can't find any reliable sources to back up that number.
(02-20-2012, 08:45 AM)NaturalViolence Wrote: [ -> ]Quote:Why would you do that?
To transfer all 64 bits of a 64 bit address at once?
Sure, but a 64 bit address is *huge* and it's extremely unlikely that anyone will have so much memory available even in distant future. I really think those are smaller in reality.
(02-20-2012, 08:45 AM)NaturalViolence Wrote: [ -> ]Edit: Interesting. You made me read a lot deeper into this subject to make sure I had my facts straight. Apparently x64 applications do use 64 bit virtual addresses but the cpu is only designed to use 48 of those bits in translation. Windows allows applications to use 44 of those bits and linux allows applications to use 47 of those bits, the OS will throw an exception if an application tries to use an address outside of the range. The physical address size/address bus may or may not be 64 bits wide but it has to be at least 48 bits at the minimum, I'm seeing 52 bits for AMD cpus but I can't find any reliable sources to back up that number.
I see, that sounds reasonable. I just checked, sizeof(int*) is really 8 on my system. I'm still thinking about a way to verify that pointers to memory areas close to 2^64 won't be accepted...
Edit: Okay, I tried this:
Code:
#include <stdio.h>
#include <malloc.h>
int main(...) {
unsigned long k = 2;
short exponent = 1;
while ( true ) {
int* ptr = (int*) memalign(sizeof(int), k);
printf("[%i] %lu %p => ", exponent, k, ptr);
printf("%i\n", *ptr);
k *= 2;
exponent += 1;
}
}
And this is the result:
Code:
> ./test
[1] 2 0x2323010 => 0
[2] 4 0x2323030 => 0
[3] 8 0x2323050 => 0
[4] 16 0x2323070 => 0
[5] 32 0x2323090 => 0
[6] 64 0x23230c0 => 0
[7] 128 0x2323110 => 0
[8] 256 0x23231a0 => 0
[9] 512 0x23232b0 => 0
[10] 1024 0x23234c0 => 0
[11] 2048 0x23238d0 => 0
[12] 4096 0x23240e0 => 0
[13] 8192 0x23250f0 => 0
[14] 16384 0x2327100 => 0
[15] 32768 0x232b110 => 0
[16] 65536 0x2333120 => 0
[17] 131072 0x7f2575c0f010 => 0
[18] 262144 0x7f2575bb7010 => 0
[19] 524288 0x7f2575b36010 => 0
[20] 1048576 0x7f2575a35010 => 0
[21] 2097152 0x7f2574c60010 => 0
[22] 4194304 0x7f257485f010 => 0
[23] 8388608 0x7f257405e010 => 0
[24] 16777216 0x7f257305d010 => 0
[25] 33554432 0x7f257105c010 => 0
[26] 67108864 0x7f256d05b010 => 0
[27] 134217728 0x7f256505a010 => 0
[28] 268435456 0x7f2555059010 => 0
[29] 536870912 0x7f2535058010 => 0
[30] 1073741824 0x7f24f5057010 => 0
[31] 2147483648 0x7f2475056010 => 0
fish: Job 1, “./test” terminated by signal SIGSEGV (Address boundary error)
Can we conclude that the virtual adress space is only 32 bits wide on this system? I'm not entirely sure yet...
Are you compiling for x64 or x86?
Quote:I'm still thinking about a way to verify that pointers to memory areas close to 2^64 won't be accepted...
If I remember correctly it's the middle of the range that isn't accepted.
And keep in mind that the virtual addresses the OS considers valid have nothing to do with the physical address size of the cpu or the width of the address bus. That stuff is invisible to the application.
(02-20-2012, 10:01 AM)NaturalViolence Wrote: [ -> ]Are you compiling for x64 or x86?
x64:
Code:
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked
(02-20-2012, 10:01 AM)NaturalViolence Wrote: [ -> ]And keep in mind that the virtual addresses the OS considers valid have nothing to do with the physical address size of the cpu or the width of the address bus. That stuff is invisible to the application.
Yes, sure.
(02-20-2012, 08:45 AM)NaturalViolence Wrote: [ -> ]Quote:Why would you do that?
To transfer all 64 bits of a 64 bit address at once?
Edit: Interesting. You made me read a lot deeper into this subject to make sure I had my facts straight. Apparently x64 applications do use 64 bit virtual addresses but the cpu is only designed to use 48 of those bits in translation. Windows allows applications to use 44 of those bits and linux allows applications to use 47 of those bits, the OS will throw an exception if an application tries to use an address outside of the range. The physical address size/address bus may or may not be 64 bits wide but it has to be at least 48 bits at the minimum, I'm seeing 52 bits for AMD cpus but I can't find any reliable sources to back up that number.
AMD is 40 bit on K8 and 48 on K10
Intel is 48.
the AMD64/Intel64 supports expansion to 52 and 64 but there is no need at this point.
Windows 8.... hmm well I got mixed opinions about it but I'm looking forward to it really.
It's always nice with a new Windows OS to play around with.
Yeah I know I have posted here before.....
I remember in 2009 when Windows 7 came, man it changed my life and way of thinking completely.
Everything was soooo much easier getting done.
Although I don't think Windows 8 will be quite as revolutionary as Windows 7, I still think it has some potential being a performance enhancer.
A new Windows OS is always a step in the right direction.
You guys sure like to talk about numbers here and there. AMD being 40 bit and Intel being 48, man does it really matter?
As long as you computer is fine and running the things you want , what difference does it make?
I'm just saying....
I've just wasted 2 hours reading all of this thread, so feel I have to make some form of relevant comment. Here goes:
In my opinion the metro UI is replacing the start menu with something more like another desktop. We already have one of those. Also I don't like the modifications made to the start menu for vista, and turned them off, so was annoyed when I couldn't in 7. However the windows 8 style interface which recently came to the XBox works well. If I could control my PC through a gamepad when I am on a game it might be handy. It would certainly be better than having XPadder set to work as a mouse.
Quote:You guys sure like to talk about numbers here and there. AMD being 40 bit and Intel being 48, man does it really matter?
As long as you computer is fine and running the things you want , what difference does it make?
I'm just saying....
It doesn't make any difference to us. However it's important for people to get their facts right instead of spreading misinformation. If someone posts something that is incorrect it is your responsibility to correct them if you know the correct answer or at least explain why they are incorrect. It makes the world a better place even if some people might deem it unnecessary (and others might even act aggressively towards being corrected).
I don't want to wait for the Costumer Preview, is there any leak?