请教:C++内存分配问题

Evelyn_ever 2005-10-10 11:02:25
6、假定一个一维数组的定义为“char * a[8] ;”,所占存储空间的字节数为 。


9、假定一个结构类型定义为
struct D {
int a ;
union { int b ; double c ; } ;
D * d[2] ; }
,则该类型的大小为 字节。
...全文
81 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
v41dugu 2005-10-10
  • 打赏
  • 举报
回复
边界问题?????/不懂。。。是怎么会事哦?
Pigwen 2005-10-10
  • 打赏
  • 举报
回复
一个指针4个字节,char *a[8]有8个指针,所以是32。

对于结构,一个int是4个字节,联合取大值,就是double的字节,为8个字节,两个指针又是8个字节,所以加起来是20个字节。但是这里有个问题,因为地址存储边界的问题,所以世界上存储的并不是20个字节,在我机器上是24个。
NetsEagle 2005-10-10
  • 打赏
  • 举报
回复
9、sizeof(struct D)我怎么运行都是24个字节
Evelyn_ever 2005-10-10
  • 打赏
  • 举报
回复
谢谢啦,结贴!
wuming2003 2005-10-10
  • 打赏
  • 举报
回复
6.a是一个数组,有八个元素,元素为指向char的指针,在32位机中,指针一般为32位,即4个字节

9.int 4个字节, union 取double 8个字节, 再加两个指针8个字节
v41dugu 2005-10-10
  • 打赏
  • 举报
回复
char * a[8] 这是一个指针数组 也就是这个a数组有8个元素 都是只能装指向char类型的指针,一个指针是4个字节 所以4*8=32哦
struct D {
int a ;
union { int b ; double c ; } ;
D * d[2] ; }
这个结构体包含了int a,(4字节) union{int b,double c}(8字节,因为联合体是分配其中最大的字节数) D *d[2](和第1题一样 指针数组 4*2=8字节) 所以一共是 4+8+8=20字节
Evelyn_ever 2005-10-10
  • 打赏
  • 举报
回复
第一个答案是32
第二个答案是20
请问下这是怎么得来的啊?
ice_river_feng 2005-10-10
  • 打赏
  • 举报
回复
sizeof(struct D)我怎么运行都是24个字节
当然是24个字节了,因为在struct中,都是以8个字节为单位的,

原本int 4个字节, union 取double 8个字节, 再加两个指针8个字节
但是,4个字节不做,本来去后面的来补充,但4+8>8,所以不能补充,只能是8+8+8=24字节
ice_river_feng 2005-10-10
  • 打赏
  • 举报
回复
ddd
Pigwen 2005-10-10
  • 打赏
  • 举报
回复
回复人: v41dugu(一步一生) ( ) 信誉:105 2005-10-10 12:37:00 得分: 0


边界问题?????/不懂。。。是怎么会事哦?


大概就是在一个struct中的数据不是连续存放的,中间是又缝隙的,所以实际存储比算的要大

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧