关闭

多核多线程对int,float等类型的读原子性

x86和x64中,从汇编的角度看, 对任何内存地址中的1byte的读永远是原子的.也就是说对一个char的读取永远是原子的 对内存地址对齐2byte的int16类型的读取是原子的,对4byte对齐的int32类型读取是原子的, 从从奔腾开始,对8byte对齐地址的int64读取是原子的. 但是,由于malloc和new都不保证创建任何对齐的内存.即使加上了pragma pack (...
阅读(995) 评论(0)

详解volatile关键字

我们假设有这么个函数: void Func(int& k) { while (k!=100) {} }如果int引用k不等于100,则在函数内部不断地循环,我们且不论这个函数性能和作用如何,单说这个函数, 它的目的很明确,即如果k!=100,则运行这个函数的线程就卡在这里了. 下面我们写main.cpp: void Do(int& k) { while (k!=100) {...
阅读(510) 评论(0)

关于 size_t , uintptr_t , intptr_t, int

C++标准没有规定size_t , uintptr_t , intptr_t, int 这几个东西的byte数,所以任何确定地说这几个东西没区别,或者 确定地说这几个东西占XX个bit的行为都是耍流氓. 那么这几个东西有什么区别呢?  int : 这个不用说了吧 size_t : 在当前平台下可能出现的最大数组尺寸.这个数在MSVC下是typedef unsigned int siz...
阅读(7277) 评论(1)

奋战一周,终于基本搞定了跨平台内联汇编的选择和其他各种问题.分享一下

其实本来我的需求挺简单的,我甚至不能说自己是个程序员,各种类库,API什么的我也只是简单了解过boost,ZThread之类常用的,连怎么在windows里用MFC画个窗体都不知道....我主要是个搞算法的人,这几年接触最多的是matlab...其次才是汇编和C++.     介于工作中用到各种数学方面的方法,以及matlab与C++结合时非常恶心的效率和链接方式,以及我对汇编还算略微熟悉,我决...
阅读(1454) 评论(1)
    个人资料
    • 访问:10913次
    • 积分:152
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档
    最新评论