大胖的部落格
Just a note
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
<
2011年8月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
Algorithm(13)
(rss)
C#(13)
(rss)
C++(22)
(rss)
Design Pattern(23)
(rss)
Others(14)
(rss)
STL(9)
(rss)
Technical(2)
(rss)
UML(2)
(rss)
Win32(18)
(rss)
Reference
Windows XP command line
最新评论
1. re: 在TCL命令行中调用C函数
@Kenny
实在不好意思,时间太过久远,本人已好久没有接触TCL……
--大胖
2. re: 在TCL命令行中调用C函数
請問如何溝通array 變數
Q:1
tcl array in C
Q:2
C array in tcl
懇求指導
--Kenny
3. re: 在TCL命令行中调用C函数
谢谢!
--1232
字节对齐
#pragma pack规定的对齐长度,实际使用的规则是:
结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。
而结构整体的对齐,则按照结构体中最大的数据成员 和 #pragma pack指定值 之间,较小的那个进行。
#pragma pack(push,
1
)
struct
My
//
1字节对齐
{
char
c;
int
i;
char
cc;
}
;
#pragma pack(push,
2
)
struct
My1
//
2字节对齐
{
char
c;
int
i;
char
cc;
}
;
#pragma pack(pop)
int
main()
{
cout
<<
sizeof
(My)
<<
endl;
//
6
cout
<<
sizeof
(My1)
<<
endl;
//
8
return
0
;
}
#include
"
stdafx.h
"
#include
<
iostream
>
using
namespace
std;
//
1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;
//
2) 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
//
3) 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式;
//
4) 如果位域字段之间穿插着非位域字段,则不进行压缩;
//
5) 整个结构体的总大小为最宽基本类型成员大小的整数倍。
void
f(
char
a[])
{
cout
<<
sizeof
(a)
<<
endl;
//
4 size of pointer
}
struct
sa
{
char
ba:
3
;
char
bc:
3
;
char
bd:
3
;
char
be:
3
;
char
bf:
3
;
//
15 bit
char
c;
//
1 byte
int
bb:
5
;
//
4 byte
}
;
struct
sc
{
char
c;
}
;
class
A
{
int
i;
char
c;
char
d;
public
:
void
FunA()
{}
}
;
class
B
{
int
i;
char
c;
public
:
virtual
void
FunB()
{}
virtual
void
FunBB()
{}
}
;
class
C
{
}
;
int
main ()
{
cout
<<
sizeof
(sa)
<<
endl;
//
4+4=8 size of struct 最小单位:4字节
cout
<<
sizeof
(sc)
<<
endl;
//
1
cout
<<
sizeof
(
int
)
<<
endl;
//
4 size of int
cout
<<
sizeof
(
double
)
<<
endl;
//
8 size of double
cout
<<
sizeof
(
char
)
<<
endl;
//
1 size of char
cout
<<
sizeof
(
float
)
<<
endl;
//
4 size of float
cout
<<
sizeof
(
long
)
<<
endl;
//
4 size of long
cout
<<
sizeof
(
void
*
)
<<
endl;
//
4 size of pointer
char
a[
7
]
=
{
0
}
;
f(a);
cout
<<
sizeof
(a)
<<
endl;
//
7 size of array
cout
<<
sizeof
(A)
<<
endl;
//
8 4+1+1 最小单位:4字节
cout
<<
sizeof
(B)
<<
endl;
//
12 4+1+4(VPTR)
cout
<<
sizeof
(C)
<<
endl;
//
1 非零长度
return
0
;
}
;
posted on 2009-06-22 14:08
大胖
阅读(226)
评论(0)
编辑
收藏
引用
所属分类:
Others
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
用C实现多态
printf
浮点数二进制表示
文件操作
字节对齐
函数调用方式
Big Endian & Little Endian 和位域
在TCL脚本中导入dll
在TCL命令行中调用C函数
Perl初学
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 大胖