十进制浮点数的表示方法
使用十进制浮点数,可以避免二进制浮点数与我们习惯的十进制数之间的表示误差.这个在金融领域是非常重要的.但是计算机基本都只能对二进制浮点数进行计算,也就是IEEE754格式表示的浮点数.很多程序都会自己模拟十进制浮点数的计算.为了统一,IEEE754做了扩展,包括了十进制的浮点数.IEEE 754-2008里面规定了十进制浮点数的一些规范.不过里面没有说具体的二进制表示方法.只是规定了32位,64位
AIX环境informix的esql与xlc混合编译对齐问题
最近在AIX环境下,使用esql编译ec/ecpp形成的.o和xlc/xlC编译普通c/cpp形成的.o进行连接,运行时发现不同.o调用传递struct结构参数访问会有错位。排除了程序本身的原因,最后发现是AIX下esql和xlc编译时默认结构对齐编译参数设置是不同的。esql编译时,可以用esql -v查看,发现-qalign=nature,而根据xlc帮助,默...
AIX下C/C++函数性能统计实现方法--改进版
上一篇实现,是统计了每一次函数调用的层次关系和耗时。如果在函数调用比较多的情况下,更关心的是减少输出,只需要总计的耗时即可。另外如果是后台程序,输出到文件会更好。因此,对程序做了改进。当设置TRACELOG环境变量,则输出到这个环境变量指定的文件中。如果设置了DETAILF,则会输出调用层次关系和每一次的耗...
动态连接库实现运行时版本更新
示例程序整体结构如下。 源程序:ps.c,cm.c,ps_tran.c,cm_tran.c(以上分版本1,版本2),main.c,makefile,aix,makefile.linux。 目标程序:libps.so,libcm.so,libps_tran.so,libcm_tran.so(以上分版本1,版本2),main。 &n...
AIX下C/C++函数性能统计实现方法
在AIX中,xlc编译器有个选项-qfunctrace,使用此选项编译的程序,自动会在每个函数的入口出口处调用以下自定义函数。extern "C" void__func_trace_enter(const char * const proc_name, const c...
unix平台动态连接库的版本管理
世界上唯一不变的是变化,对于动态连接库更是如此。动态库天生为方便程序的更新而设计,只需要替代库文件,无需重新编译主程序,即可运行更新后的版本。另外,动态库是多应用共享的,多个程序使用同一个库,那么库只会加载一份。 但是,现实往往不这么简单。既然动态库...
各unix平台动态连接库的编译与使用
unix平台下,动态连接库的使用有两种方式,link方式和dlopen方式。需要设置LD_LIBRARY_PATH作为查找路径(低版本AIX使用LIBPATH)。link方式是程序启动时加载所有编译时连接的动态库,直到程序结束也不会关闭。dlopen方式是在运行中按照参数指定的方式加载动态库,并可以使用dlclose函数关闭,直到下次再使用dlopen重新加...
AIX的xlc编译参数设置局部变量初始化
在C/C++程序中,全局和静态变量,编译器会默认初始化为0。而局部变量是没有默认值的,分配到的内存空间保留原有无意义的值。在很多老旧代码中,初始化和使用都不规范,导致非常容易出现异常情况。为了降低异常的概率,通过xlc的编译参数,可以让局部变量也进行默认值初始化动作。参考xlc的帮助:&nbs...
informix的esql编译参数避免//注释引起的SQL中断问题
在EXEC SQL中,如果SQL语句出现了“//”符号,那么会导致后面一直到“;”结尾的SQL语句都被忽略,而不止当前行。这样往往会出乎程序员的意料。例如以下例子程序t1.ec。int main(){ EXEC SQL UPDATE vyktd ...