64位 C++ 一维指针数组和结构体占用内存大小结算

/* 定义一个一维的指针数组 */
int** array= new int*[n];

/* 节点结构 */
typedefstruct
{
constvoid * lpItem;
uint32_t nIndex;
uint16_t nLength;
} ITEM;

请问上面两种数据结构在64位系统中(比如Linux)分别会占多少内存啊?具体到多少bit和byte。请帮忙给出详细的计算方式,谢谢!

就不说bit了 至少得是整byte的 不会出现占用零散bit的情况
对于64位 最大的区别是地址是8字节的 即sizeof(A *) = 8
这样 对于
int** array= new int*[n];

可以确定 array本身占8字节 分配的空间每个int *占8字节,总的分配空间大小为 8*n

至于结构体
首先void * lpItem;占8字节

uint32_t nIndex; 占4字节
uint16_t nLength;占2字节
按照对齐方式 64位默认应该是8字节对齐 所以 这个结构体的大小应该是 16字节
如果你有64位的编译器 可以打印一下看看
sizeof(int *)
sizeof(int **)
sizeof(ITEM)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-24
自己用sizeof 算
相似回答