代码的优化 (三)(小疯子)

EnochShen EnochShen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
/*
在C++中,关键字Inline可以被加入到任何函数的声明中。这个关键字请求编译器
用函数内部的代码替换所有对于指出的函数的调用。 这样做在两个方面快于函数
调用。这样做在两个方面快于函数调用:第一,省去了调用指令需要的执行时间;
第二,省去了传递变元和传递过程需要的时间。但是使用这种方法在优化程序速度
的同时,程序长度变大了,因此需要更多的ROM。另外它比宏更安全更容易调试。
不过值得注意的是Inline仅仅是对编译器的建议,编译器有权利忽略这个建议。
比如:函数体的大小,是否有局部对象被声明,函数的复杂性等等。如果当编译器
拒绝内联一个函数的时候,那个函数会像普通函数一样被对待,但是还会出现一些
其他的问题。使用这种优化在Inline函数频繁调用并且只包含几行代码的时候是最
安全最有效的。
*/

//寄存器变量

void CMainFrame::OnTest5()
{
nTestNumber = 0;

QueryPerformanceCounter(&n64StartCount);
QueryPerformanceFrequency(&n64Frequency);

for(dwIndex = 0;dwIndex < 10000000;dwIndex ++)
{
nTestNumber ++;
}

QueryPerformanceCounter(&n64StopCount);
dwTotalTime = n64StopCount.LowPart - n64StartCount.LowPart;
if(dwTotalTime < 0)
{
testFunc2(nTestNumber);
}
float IntervalTime1 = (float)(n64StopCount.LowPart - n64StartCount.LowPart)
/(n64Frequency.LowPart + n64Frequency.HighPart * 2^32);

nTestNumber = 0;

QueryPerformanceCounter(&n64StartCount);
QueryPerformanceFrequency(&n64Frequency);

for(register UINT nIndex = 0;nIndex < 10000000;nIndex ++)
{
nTestNumber ++;
}

QueryPerformanceCounter(&n64StopCount);
dwTotalTime = n64StopCount.LowPart - n64StartCount.LowPart;
if(dwTotalTime < 0)
{
dwTotalTime += 2^32;
}
float IntervalTime2 = (float)(n64StopCount.LowPart - n64StartCount.LowPart)
/(n64Frequency.LowPart + n64Frequency.HighPart * 2^32);

strOutput.Format("例子1所消耗的时间是:%f,例子2所消耗的时间是:%f。\r\n代码运行速度提高%.2f%%",
IntervalTime1,IntervalTime2,(IntervalTime1/IntervalTime2 - 1)*100);

AfxMessageBox(strOutput);
}

/*
循环计数是应用寄存器变量的最好的候选者。当它们没有被存入一个寄存器中,
大部分的循环时间都被用在了从内存中取出变量和给变量赋新值上。如果把它存入
一个寄存器中的话,将会大大减少这种负担。需要注意的是,register仅仅是对编
译器的一个建议。就好比内联函数一样,编译器可以拒绝把一个对象存储到寄存器
中。另外,现代的编译器都会通过把变量放入寄存器中来优化循环计数。register
并不仅仅局限在基本类型上,它能够被应用于任何类型的对象。如果对象太大而不
能装进寄存器的话,编译器仍然能够把它放入一个高速存储器中,例如cache。
另外:用register声明函数型参将会是建议编译器把实参存入寄存器中而不是堆栈中。
*/
...全文

相关推荐

daimafengzi:代码疯子图床

大马风子 代码疯子图床

深夜里呕吐的鱼公子

疯子CMS-轻简小说系统内容管理实战

在现代前端开发中,组件化已经成为一种行业标准。组件是可复用的代码块,它们将用户界面拆分成独立的、可管理的部分。自定义组件开发的步骤通常包括:确定组件需求:明确组件需要完成什么功能,它将如何与其它组件交互。设计组件接口:定义组件的属性(props)、事件(events)和插槽(slots),使其在不同的上下文中能够以不同的方式工作。构建组件结构:使用HTML创建组件的基本结构,并确保结构是语义化的,能够被屏幕阅读器等辅助技术理解。应用样式。

艾古力斯

疯子CMS轻简小说系统:原生PHP高并发小说站实战架构

小说CMS系统是中小型内容站点的核心技术选型之一,其本质是围绕章节管理、阅读体验与快速上线构建的垂直化Web应用架构。理解其底层原理需从原生PHP性能优化、MySQL高频查询设计、CSS驱动的响应式排版及无框架缓存策略入手——这些技术共同支撑起日均5万PV的稳定服务。疯子CMS摒弃ORM与重型框架,通过手写SQL控制查询粒度、用LayUI+纯CSS实现跨端阅读体验、以update_sql.sql作为安全热升级通道,并将繁简转换、主题切换等能力下沉为可配置契约。它代表了一类被低估的‘务实型’PHP工程实践:不

lihaiyan0001

疯子扫描器

本扫描器用于扫描设置IP机器的文件内容,可选择需要扫描的内容

Mike_90

疯子:疯子:玩具lua解释器

疯子:疯子:玩具lua解释器

蒋叶婷
评论 1
收藏 已收藏
分享
返回顶部
EnochShen
硬件/系统 2,644 成员 17,229 内容