I have a 64GB SanDisk Extreme Pro. In the Mac, either ExFAT or FAT formatting shows 64 GB as expected. Under Windows (Vista through 8) it only shows up as 31 GB.
I traced it back to inconsistent information in the results of the ATA IDENTIFY command - the command that returns the number of cylinders/heads/sectors-per-track, name, capacity, model, etc. The Sandisk reports:
0xffff cylinders (Word 1, also Word 54)
0x0010 heads (Word 3, also Word 55)
0x003f sectors/track (Word 6, also Word 56)
0x03effc10 sectors capacity (Word 57)
0x07736000 sectors LBA capacity (Word 60)
??? Two different sector counts? Guess what - 0x07736000 (LBA count) is 64000884736 = 64 GB while 0x03effc10 (“legacy CHS”) is 33822351360 = 31 GB.
Why are these different?