VC和gcc不同,不能保证静态变量的线程安全性.这就给我们的程序带来了非常大的安全隐患和诸多不便.这一点应该引起我们的重视!尤其是在构造函数耗时比較长的时候.非常可能给程序带来意想不到的结果.本文从測试代码開始,逐步分析原理,最后给出解决方式. 多线程状态下.VC不能保证在使用函数的静态变量的时候,它的构造函数已经被运行完成,以下是一段測试代码: class TestStatic { public: TestStatic() { Sleep(1000*10); m_num = 999; } pu…
VC和GCC静态变量析构顺序不同(金庆的专栏)静态变量析构顺序正常情况下是构造的反序.但是VC对DLL中的静态变量好像是需等待DLL卸载时再析构,表现为主程序中的静态变量先析构,DLL中的静态变量后析构.VC测试版本为VC2010Express.例如:class A {};static A s_a;int main(){    extern B & getB();  // defined in b.dll    B & rb = getB();    return 0;}b.dll中有个静…
首先得说明什么叫“编译单元”.每个 .c 文件会被编译为一个 .o 文件,这个就是一个编译单元.最后所有的编译单元被链接起来,就是一个库或一个程序. 一个变量/函数,只要是在全局声明的,链接之后都隐含地在所有编译单元中可见.但你的声明可能仅出现在一个 .c 文件中,这就暗示你不想把这个名字暴露给其它编译单元,这种情况下就得用 static 关键字,表示这个名字具有“内部链接”,只对当前编译单元有效.但还有一种可能,你确实想暴露这个名字,但其它的编译单元希望知道这个名字被声明为什么类型,所以你需要…
static 和 final 关键字 对实例变量赋初始值的影响 最近一直在看<深入理解Java虚拟机>,在看完了对象内存分配.Class文件格式之后,想深扒一下实例变量是如何被赋上初始值的这个问题的细节. 在2.3.1小节中讲对象创建的时候,讲到内存分配有两种方式:一种是指针碰撞:另一种是空闲列表. 而选择哪种分配方式是由JAVA堆是否规整决定,而JAVA堆是否规整则由虚拟机所采用的垃圾收集器是否带压缩整理功能决定. 我们不管内存分配采用何种方式,当内存分配完成后,虚拟机将分配到的内存空间都初…
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用. public class Test{public static int a;private Test(){a=0;}} 如果属性被修饰为static静态类资源,那么这个字段永远只有一个,也就是说不管你new test()多少个类的对象,操作的永远都只是属于类的那一块内存资源.例…
博客来源:http://blog.csdn.net/zyl910/article/details/8100744 现在很多编译器支持intrinsic函数,这给编写SSE等SIMD代码带来了方便.但是各个编译器略有差异,于是我编写了zintrin.h,智能引入intrinsic函数. 一.各种编译器的区别 1.1 Visual C++(Windows) 最早支持intrinsic函数的VC编译器是VC 6.0.它在装上Visual Studio 6.0 Service Pack 5.Visual…
以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertColumn -------------------------------------------------------------------------------- 1. CListCtrl 风格      LVS_ICON: 为每个item显示大图标      LVS_SMALLICON: 为…
gprof是GNU组织下的一个比较有用的性能测试功能: 主要功能:   找出应用程序中消耗CPU时间最多的函数: 产生程序运行时的函数调用关系.调用次数 基本原理:   首先用户要使用gprof工具,必须在GCC编译该文件的选项中添加-pg选项,然后GCC会在用户应用程序的每一个函数中加入一个名为mcount(或者是_mcount.__mcount,这依赖于编译器或操作系统)的函数,即应用程序中每一个函数都要调用mcount函数,而mcount函数使用后会在内存中保存函数调用图,并通过函数调用堆…
在不同平台上开发C/C++程序时,为了避免源码文件乱码,得采用UTF-8编码来存储源码文件.但是很多编译器对UTF-8源码文件兼容性不佳,于是我做了一些测试,分析了最佳保存方案. 一.测试程序 为了测试编译器对UTF-8源码文件兼容性,我编写了这样的一个测试程序—— //#if _MSC_VER >= 1600 // VC2010 //#pragma execution_character_set("utf-8") //#endif #include <stdio.h>…
一 打印进度条 import time for i in range(20): # \r 回到行首打印内容 如果有同一行内容,那么就被抹掉了 n = '>'* i print('\r%s'%n,end='')# 末尾去空格 保证是在一行打印的. time.sleep(0.5) 另一种方法 import sys import sys import time for i in range(10): sys.stdout.write('>') sys.stdout.flush() time.slee…