经理的优化课

来源:互联网 发布:mac上文档是什么格式 编辑:程序博客网 时间:2024/05/22 14:17

算法优化,SSE指令优化(汇编),汇编控制寄存器,C++不能控制寄存器操作;程序优化时,工程属性可选是否进行SSE优化;浮点转整数, 除法倒数再相乘优化,文件头结构体,加减指令周期相同,乘法5-6个指令周期,除法十几个指令周期,多线程优化(多核处理器),要处理同步问题。memcpy整块字节拷贝,参数调窗,三角函数目前有查表优化方法,汇编无法做三角函数优化;算数开方优化。工程中dll文件该如何写,要把结构体先写入一个公共头文件,然后两边加载。

关于工程属性Preprocessor definitions的使用,Preprocessor definitions中可以自定义预编译头,(公用结构体头文件再.h文件中以相对路径加载)详见:

http://blog.csdn.net/jindan_jinming/article/details/4315030

程序调试查看内存段的内容是否相同,见下图:

汇编优化,多线程,内存对齐,每次读取若干字节,例如可每次读取256个字节,或者可以一次进行8次加法。


loadlibrary 只适用于C的导出函数,指定导出那个函数,一般形式如下:

#ifdef _UIS_INTERP_DLL_
#define _UIS_INTERP_EXTERN_FUNCTION_HEADER_ extern "C" _declspec(dllexport)
#else
#define _UIS_INTERP_EXTERN_FUNCTION_HEADER_ extern "C" _declspec(dllimport)
#endif

另外,c的函数导出用depends工具查看,函数名与导出的函数名相同,且C不支持函数重载。见下图


C++的导出类必须用_declspec(dllexport),因为导出类后,会将类中的所有函数都导出,不能指定导出类的哪一个函数。调用方通过lib文件及导出符号来跳转到相应函数的起始地址,所谓的导出符号既是下图中的function一栏中的内容。类导出的宏定义常见形式如下:

#ifdef _UIS_INTERP_DLL_
#define _UIS_INTERP_DLL_HEADER_ _declspec(dllexport)
#else
#define _UIS_INTERP_DLL_HEADER_ _declspec(dllimport)
#endif

类的导出用depends工具查看,类函数名与导出的函数名不相同,C++支持函数重载,见下图:

其中??0代表是类导出,之后是类名,函数名等等。Entry point代表函数的入口点,地址。

另外,单例模式只维护一个对象,所谓的注册是将对象加载到链表中去,销毁是-:当程序结束后集中销毁链表中的每一个元素。
int CApp::ExitInstance() {// TODO: Add your specialized code here and/or call the base classIReader::s_ReleaseObject();CSingleton::s_DestroyAll();IDatabaseObject::CloseDBConnection();return CWinApp::ExitInstance();}
函数前缀m代表成员函数,s代表静态函数ms_add代表某类的静态成员函数。

0 0