allocating memory with cudaGraphicsGLRegisterImage

It seems cuda somehow allocates too much memory when I point opengl 3d texture as cudas buffer by cudaGraphicsGLRegisterImage.

the problem:
///////////////////////////////////////////////////////////////////////////////
int length = 256;

uchar* data = new uchar[length*length*length*4];
for (int k = 0; k < length*length*length*4; k++) data[k] = 0;

glEnable(GL_TEXTURE_3D);
PFNGLTEXIMAGE3DPROC glTexImage3D;
glTexImage3D = (PFNGLTEXIMAGE3DPROC) wglGetProcAddress("glTexImage3D");

glGenTextures(1, &texname);
glBindTexture(GL_TEXTURE_3D, texname);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, length, length, length, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
glBindTexture(GL_TEXTURE_3D, texname);

GLenum target = GL_TEXTURE_3D;
cudaError error = cudaGraphicsGLRegisterImage(&cuda_pbo_resource, texname, target, cudaGraphicsRegisterFlagsReadOnly);

//////////////////////////////////////////////////////////////////////////////

so after the last step it is engaged about 216Mb! on my videocard, but the volume is (4*256^3)/(1024^2) = 48Mb