| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 666 人关注过本帖
标题:[讨论] 结果为什么是24呢?
只看楼主 加入收藏
jdytz
Rank: 2
等 级:新手上路
威 望:3
帖 子:104
专家分:0
注 册:2005-4-24
收藏
 问题点数:0 回复次数:3 
[讨论] 结果为什么是24呢?
#include<iostream>
#include<stdio.h>
using namespace std;
struct name{
 int s;
 double g;
 char a;
  //char d;
};
int main()
{  int s=sizeof(struct name);
   cout<<s;
   return 0;
}
搜索更多相关主题的帖子: 结果 
2005-05-15 23:04
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 

嗯,这个问题还是很有意思的,没有看过<<深度探索C++对象模型>>的一般不能解答这个问题,所以对C++有狂热爱好的朋友们可以看看那本书,但是要有心理准备,那本书很难的,可是一旦看上就会上瘾的;呵呵. 废话不说了,看我的代码: #include<iostream> #include<stdio.h> using namespace std;

struct name { int s; double g; char a; };

int main() { int temp = sizeof(double) + sizeof(int) + sizeof(char) + sizeof((name*)0); int size = (temp+8-1) & ~(8-1);//这里用了一个N帅的算法,原型是(bytes+_ALGIN-1) & ~(_ALGIN-1),其中_ALGIN就是8,如果想知道此算法的细节,请直接找我(QQ:10064806),或者去看<<STL源码刨析>>第二章(内存池算法),或者去看MFC库的字符串类(CString)的.cpp文件 cout << size << endl; return 0; } 4 + 8 + 1 = 13 因为是C++定义,所以有虚函数指针,又加4字节,结果是17字节. 因为必须8的倍数,所以填充7空字节,结果是24字节.

[此贴子已经被作者于2005-5-16 9:22:10编辑过]


I am a big fan of c plus plus.
2005-05-16 09:17
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 
不过我一直对于C++对象模型的这种添加空字节的做法持保留意见,C++设计者(B.S博士)的意图应该是空间换时间.

I am a big fan of c plus plus.
2005-05-16 09:20
jdytz
Rank: 2
等 级:新手上路
威 望:3
帖 子:104
专家分:0
注 册:2005-4-24
收藏
得分:0 
哦,原来我还碰到了一个有趣的问题。。明白了。。讲解好详细,,谢谢哦

``` 奔放潇洒活着我的自由
2005-05-16 12:28
快速回复:[讨论] 结果为什么是24呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016841 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved