Memory Cards – Here Is Where Your Lost Bytes Are

A few days a go we published a post called Memory Cards Have “Less Space” Than Advertised, Here Is Why explaining how to read the labels on memory cards and shedding light on the fact that the cards used a metric system to denote capacity which makes them look smaller then what we think they should look like.

Memory Cards Have "Less Space" Than Advertised, Here Is Why

We have had a few interesting responses to that post, two of which I would like to share (highlighting is mine):

The first one from jceeetle, who mentions that MacOS X no longer uses binary to report storage sizes. It uses the SI system. A 32GB card is reported as 31.9GB. A 2TB drive is reported as 2TB capacity.

This is good news if you are a MC OS user, not because you get more memory, but because the capacity on the label and the capacity shown on your drive match.

The second comment comes from Orki who is a Flash industry veteran. Rather than observe the fact that some of the bytes are missing, Orki explains where those bytes are going to:

I used to work in a flash memory company so you can take my word for this…

The underlying truth is that the card manufacturers aren’t trying to rip you off at all. The number of bits internally on the memory chip is at LEAST the binary Giga i.e. 34,359,738,368 bits per “32GB” card (often a bit more) but they aren’t ALL available for you to use because of several reasons:

A) Flash memories stress the production process to the max and are huge area chips so they often (10-20%) have bit,line,column or sector defects right out of the fab. These defects are screened in post-production testing and the whole defective sector is marked “bad” and either replaced by dedicated spares or simply mapped out of the valid address space (like a bad sector on a hard disk).

This requires keeping some sectors “on the side” to use instead so all cards have the same available capacity.

B) During the lifetime of the card, especially if it was tortured with many write cycles and high temperatures some defects may appear that were not there in the first place. The controller on the card that manages the flash memory chip can detect these errors and add these locations to the bad sector table it manages. The data is moved to one of the sectors that was “kept on the side” and you don’t feel a thing.

C) Said controller runs its own firmware, file allocation table and all the management data which are stored on the flash chip and require some space too.

D) Finally, suppose you keep some files on the card indefinitely while other memory locations are write-erased many times, those latter locations will wear out much faster than the former. To average this out and also to re-write existing data in order to “refresh” it (write strong ‘1’s and ‘0’s again) the controller runs what is called a “wear leveling” algorithm.

In the wear leveling algorithm, the card controller, while being powered but not doing anything useful, moves old files to new (erased) locations in the memory chip thus refreshing the bit state and also allowing the former location to free up and wear-level like the rest of the bits. It then proceeds to update the new file location in the file allocation table so you don’t realize a thing!

To be able to move files around even if the card is “100%” full of cat videos, some sectors are also “kept on the side” for this purpose.

Since all these sneaky tricks require putting several percent of the memory on the side, marketing figured an asterix with a lame excuse is simpler than a 2-page-long blog comment.

I think so too.

Orki and jceeetle, thanks for raising the bar.

  • Sita Carolina

    Good to know/clarify! Thank you so much for this! :)

  • Marek Smoliński

    The number of bits internally on the memory chip is at LEAST the binary Giga i.e. 34,359,738,368 bits per “32GB” card

    Don’t you mean bytes?