以下是我从网上搜来的一位大神对于volatile关键字的的分析,感觉非常霸气……
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。 假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。 1). 一个参数既可以是const还可以是volatile吗?解释为什么。 2). 一个指针可以是volatile 吗?解释为什么。 3). 下面的函数有什么错误: int square(volatile int *ptr) { return *ptr * *ptr; } 下面是答案: 1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 3). 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码: int square(volatile int *ptr) { int a,b; a = *ptr; b = *ptr; return a * b; } 由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下: long square(volatile int *ptr) { int a; a = *ptr; return a * a; }
Tempter of the Bone [从零开始DFS(1)]题意分析给出一张大小为n * m的地图,其中: X代表墙壁,走不通; S代表起点; D代表终点; . 代表空白区域,即可以走通。 求解是否正好可以在第T步的时候走到终点,并且不能走回头路(即走过的地方不能再走)。 典型的地图搜索问题嘛,首先想到的就是DFS。先回顾一下上次探讨的内容。 传送门: HDOJ.1342 Lot
/** * 调用统一下单,获得下单结果 * * @return 统一下单结果 * @throws WxPayException * @throws IOException * @throws SAXException * @throws ParserConfigurationException * @throws N...
用户都 希望他们访问的web应用是可交互且运行流畅的。因此,作为web开发者,你也要在这方面多花点功夫。你所做的页面,不但要能被快速加载,还要能流畅运行:页面的滚动要快速响应手指的动作,动画和交互效果更要如丝般顺滑。要想编写高性能的web站点或应用,你需要充分了解浏览器是如何处理HTML/JavaScript/CSS的,从而确保你写的代码(或引用的第...
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);_vb程序窗口在桌面前端显示代码
//运行时错误应该时你栈为空的时候你访问了top//访问top之前一般都要判断一下栈是否为空比如一种情况,一开始输入的就是右字符,立马就会访问top,此时栈是空的,就会出现运行时错误的情况,所以要首先进栈一个字符作为标志 stack<char> s; s.push('@');//用于判断栈是否为空最后进行所有括号匹配后要判断栈是否为空if(s.top() !='@') return false; else return true;//漏了这
股票,外汇,期货交易是一种极其复杂的交易系统,纽交所,纳斯达克每秒钟都进行这上百万的撮合交易,大量的数据数百万的并发量对服务器产生巨大的压力。要面对这么多的客单量,传统框架的交易系统将会造成雪崩,无法提供服务,安全高效的高并发框架是突破此类技术瓶颈的主要方案之一。今天小编将带领大家了解一款号称单线程每秒钟解决600万订单的高并发框架:Disruptor.一、何为Disruptor?disrupto..._disruptor 单线程
前段时间弄了下微信的dat图片的解码,后续有同学问数据库的解码怎么弄.. 当然,后边陆陆续续的看了下,加上住院乱七八糟的事情,一直没处理,最近几天处理了下,发现微信数据库的数据格式是真的麻烦...查看如何查看微信dat图片的请走这里简单梳理下最近的操作:通过od拿到PC端微信数据库的密钥 通过c++ 将PC端微信数据库db文件进行解密成普通db 通过nodejs来读取sqlite数据库,拿到好友和聊天记录前面两部就不讲了,我也是直接拿着大神的教程直接做的,没啥变化,也讲不出什么东西来。 本_微信电脑版db文件解密
**Apriori 算法关键概念**01 项集 :在关联分析中,包括0个或多个项的集合被称为项集。如{啤酒,尿布,牛奶,花生}是一个4项集。02支持度: 一个项集或者规则在所有事物中出现的频率,确定规则可以用于给定数据集的频繁程度。03置信度: 确定Y在包含X的事物中出现的频繁程度。简单说,可信度就是指在出现了物品集X的事物T中,物品集Y也同时出现的概率有多大。04期望置信度: 期望可信度描述了在没有任何条件的影响时,物品集B在所有事物中出现的概率有多大。05提升度: 提示度是可信度与期望可信_apriori算法案例分析
[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 3.608s[INFO] Finished at: Thu Feb 05 10:50:14 CST 2015[INFO] Final Memory: 17M/45M...
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php杭电OJ分类题目(3)HDU Computational GeometryHDU 1086 You can Solve a Geometry Problem tooHDU 1115 Lifting the StoneHDU 1140 War on WeatherHD..._oj相遇周期
本文实例为大家分享了python批量读取文件名并写入txt中的具体代码,供大家参考,具体内容如下先说下脚本使用的环境吧,在做项目的过程中需要动态加载图片,使用Unity的Resources.Load方法,但是百十张图片怎么能一 一写下他们的名字作为加载的路径呢?总不能一个一个编辑后存到数组中吧,(虽然我最初是这么做的)。所以必须有一个批量的工具,必须的。于是乎激发了我的灵感,下面看代码。备注少,不...
该篇文章将的是行人重检测。现在街头有很多摄像头,如何在后面的视频中找出前面摄像视频中的人,就是行人重检测,比如警察看视频追踪犯罪分子。最简单的方法就是图像识别,提取特征,分类识别。可是在不同视频中寻在很多问题:遮挡,摄像头的角度不同,明暗变化,还有人的姿势不同,等等。使得通过静态帧图片进行检测效果太低。