I'll take a stab at answering this for you. Yes and No.
Yes:
A region is a Vector3DInt32, which is a Vector<3,int32_t>, which is in a sense the same as int[][][].
The memory for a region will be allocated based on the size of the region and the size of the type being stored (in this case it's an Int32 or (int) which is 32bits.)
Code:
x * y * z * 32bits
It does not matter what value is assigned to the int, because it has enough memory allocated to store it's largest value.
No:
That being said... now when you take that region and you start using that data to build your surface mesh you will save on memory for having 0 values.
Since at this point you are only interested in storing values like "vertex positions" of voxels that do exist in your region, you won't be creating any extra memory allocations for empty areas of the region.
In my project I am not so much worried about the size of my regions. It's the stuff you build based off the region data that really starts to take up memory. So just don't keep around data you don't need.
For example when I create my surface mesh based off my region and then use that to build my ManualObject (mesh) in ogre.
I dynamically allocate the surface mesh, extract it, build my ManualObject and then I delete the surface mesh to free up the memory.
When I first started programming I would of probably stored it in a member or forgot to delete it and not even realize I would be leaking a lot of memory if I started updating my region and re extracting a surfacemesh without first deleting the old data

Anyways I hope this helps. I'm still very Jr, but I know these forums aren't the fastest place for help so I thought I would try and get you an answer.