充分利用栈空间提高程序性能

这里介绍一种C++的奇怪代码编写方式, 在追求高性能运算的环境下, 可以让性能和资源都达到较好的发挥. 但不是什么好的代码, 只适用于要求高效率的情况的小量代码使用.

以下的三种访问速度, 哪一种会是最快的?

1. 全局数据区的数据

2. 堆数据区的数据

3. 栈数据区的数据

答案是3, 栈空间里面的数据访问是最快的.

不论写入还是销毁还是读出, 都是栈空间是最快的, 没有测试过的人可以自行测试一下.


但利用栈空间, 一般都必须是写硬编码, 即编译以后, 大小就不能够改变的了, 假如按最大的变量来分配, 这样就显得有点浪费了, 速度上的差距可以忽略, 但栈空间的资源不是那么多, 这样使用显得有点浪费了, 采用如下的写法可以解决这类矛盾, 当然前提也是知道最大的空间要求, 并且不能够分配太多的栈空间.

思维方式: 把函数拆分为三个部分: 固定数据部分, 可变数据部分, 处理部分, 然后得出如下的代码写法:

static unsigned long Process( unsigned char* pStaticBuffer, unsigned char* pVariableBuffer, int nVarLen )
{
	// now, we can get a static buffer and variable buffer to process
	// instead of using global variant and heap variant which access speed lower than stack variant.
	return 0;
}
#define VAR_RES(x)  unsigned long __stdcall VariableResource##x( unsigned char* pStaticBuffer )\
{\
	unsigned char buf[x];\
	return VXProcess( pStaticBuffer, buf, x );\
}
VAR_RES(1)
VAR_RES(2)
VAR_RES(3)
VAR_RES(4)
VAR_RES(5)
VAR_RES(6)
typedef unsigned long (__stdcall *FN_Resource)( unsigned char* pStaticBuffer );
static FN_Resource g_VariableResource[] = {
	NULL,
	VariableResource1,
	VariableResource2,
	VariableResource3,
	VariableResource4,
	VariableResource5,
	VariableResource6,
};
static unsigned long StaticResource( unsigned long ulVarResCnt )
{
	unsigned char arStaticBuffer[1024];
	return g_VariableResource[ulVarResCnt]( arStaticBuffer );
}

采用上述的方式, 利用宏和全局的函数映射表, 可以实现一个假的动态数组, 这个数组的空间是完全在栈里面的, 访问速度非常快, 适合运算类的处理, 对于多线程的编写也是非常有效的提高效率的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值