内联函数和联合体

两者没什么联系,主要是个人会将其概念混乱,所以记录一下

联合体

共用同一内存空间;同一个内存空间中存储不同的数据类型,联合体也叫共用体,定义联合体的关键字是union
定义一个联合类型的一般形式为:
成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名。其占用的字节数为成员中最大数据类型占用的字节数。
与结构体(struct)、枚举(enum)一样,联合体也是一种构造类型:

union 联合名
{
	成员表
};

联合体的应用示例

检测当前处理器是大端模式还是小端模式?


union MyUnion
{
	short value;
	char bytes[2];
}test;
int len = sizeof(short);
int len1 = sizeof(test);
test.value = 0x0102;
if ((test.bytes[0] == 1) && (test.bytes[1] == 2))
{
	cout << "大端字节序" << endl;
	TRACE("大端字节序");
}
else if ((test.bytes[0] == 2) && (test.bytes[1] == 1))
{
	cout << "小端字节序" << endl;
	TRACE("小端字节序\n");
}
else
{
	cout << "未知" << endl;
}

内联函数

内联函数可以避免函数调用的开销,在函数的返回类型前面加上inline就可以声明为内联函数
内联机制用于优化规模小,流程直接,频繁调用的函数。内联机制既具备宏代码的效率又增加了安全性,所以可以尽量使用内联函数来代替宏定义。

inline const string&shortstring(const string &s1,const string &s2)
{
	return s1.size()<=s2.size()?s1:s2;
}

使用内联函数的缺点也是非常明显的,编译后的程序会存在多份相同的函数拷贝,如果被声明为内联函数的函数体非常大,那么编译后的程序体积也将会变得很大,所以再次强调,一般只将那些短小的、频繁调用的函数声明为内联函数。

内联能提高函数的执行效率,那么为什么不把所有的函数都定义成内联函数呢?
内联以代码膨胀(拷贝)为代价,仅仅省区了函数调用的开销,从而提高程序的执行效率。(开销指的是参数的压栈、跳转、退栈和返回操作)。
如果执行函数体内代码的时间比函数调用的开销大得多,那么inline效率收益会很小。
每一处内联函数的调用都要拷贝代码,使程序的总代码量增大,消耗更多的内存空间。

如果函数体内代码比较长,使用内联将导致可执行代码膨胀过大。
如果函数体内出现循环或者其他复杂的控制结构,那么执行函数体内代码的时间将比函数调用的开销大得多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Minuw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值