一些关于VC++开发的笔记
通常程序卡住了,主要有双方面的可能:
(1)死循环了
(2)死锁了
要确定是否是死循环。能够通过调试器(经常使用Windbg)查看线程执行时间,假设隔了一段会儿两次查看的执行时间有非常大区别,那么非常有可能是死循环了。反之,可能是死锁了。这时候能够看一下堆栈最上帧是不是在调用相似WaitForSingleObject或者WaitForMultiObject之类的函数。假设线程非常多,仅仅能逐步排查那些线程在等哪些锁。
关于容器的删除操作
vector,list,map都能够通过erase函数删除元素。
erase(it++)的方式不能用于vector。vector须要通过it = erase(it)的方式删除,erase会返回被删除的最后一个元素的迭代器。
而链式结构的list和map能够使用erase(it++)方式删除。这是由于參数的++处理操作优先于函数调用,所以it会在erase之前先变成下一个迭代器。当然it = erase(it)也是能够的,两种方式等价
将计数与new出来的内存联系在一起,这就是shared_ptr的本质。
在使用的时候。不须要自己显式控制计数加减。而是通过shared_ptr内部进行计数。我们自己全然能够通过这样的思路实现shared_ptr。
多线程环境下,智能指针在读的时候,能够通过推断引用计数来推断其它地方是否在占用该对象。
Copy_On_Write–Refer_On_Read:写的时候又一次拷贝一份。读的时候引用一下。智能指针在写的时候,假设有人在占用这个内存。reset一下。相当于把引用计数减一,然后又一次开辟一段内存区域拷贝原来的内容,在这里面进行写。
读的时候,引用一次这个指针。计数加1。
这样进行读占用的地方就还是使用原来的内存,而使用完成之后,引用计数减1,会释放这段内存。
这样当前使用的是曾经的内存。以后真正訪问的是新开辟的内存。妙!!!
文件编译时存在未声明/定义或文件未包括的情况
有时候明明感觉是包括了,检查了一遍又一遍。却还是不知道哪里问题。
这时候能够加编译选项CommandLine /P,能够生成.i文件,将包括的整个文件关系显示出来。通常可能是包括顺序问题,或者define/undefine了某个宏导致的问题
一些关于VC++开发的笔记的更多相关文章
- 【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)
版本:第一版 作者:毛鹏 杨帅 日期:20151108 简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC#环境下进行温 ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 驱动开发学习笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇
驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Doc ...
- 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇
驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...
- 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统
驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...
- android开发学习笔记000
使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...
随机推荐
- 去掉a标签的虚线框,避免出现奇怪的选中区域
a{blr:expression(this.onFocus=this.blur())}/*去掉a标签的虚线框,避免出现奇怪的选中区域*/
- 手机meta标签(保存下来省的每次都找)
手机网站Meta标签 手机端特有的Meta标签 1.<meta name="viewport" id="viewport" content="w ...
- hdu 3277(二分+最大流+拆点+离线处理+模板问题...)
Marriage Match III Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- AC日记——「SCOI2015」情报传递 LiBreOJ 2011
#2011. 「SCOI2015」情报传递 思路: 可持久化树状数组模板: 代码: #include <bits/stdc++.h> using namespace std; #defin ...
- SpringBoot学习:在Interillj Idea上快速搭建SpringBoot项目
一.创建SpringBoot项目 二.导入Jar包(pom.xml) <?xml version="1.0" encoding="UTF-8"?> ...
- 在SpringMVC中 /* 和 / 的区别
<url-pattern> / </url-pattern>:会匹配到 /springmvc 这样的路径型url,而不会匹配到像 .jsp 这样的后缀型的url. <ur ...
- python中,将字符串由utf8转gbk
uni_str = utf8_str.decode('utf-8'); gbk_str = uni_str.encode('gbk');
- nio案例一:个简单的客户-服务的案例
<Java NIO文档>非阻塞式服务器 原文连接 原文作者:Jakob Jenkov 译者:higher 即使你知道Java NIO 非阻塞的工作特性(如Selector,Channel, ...
- Shiro过滤器的维护与匹配执行
servlet的初始化会触发核心过滤器的创建: public Object getObject() throws Exception { if (instance == null) { instanc ...
- Python开发基础-Day6-函数参数、嵌套、返回值、对象、命名空间和作用域
函数的使用原则 函数的使用必须遵循:先定义后使用的原则 函数的定义,与变量的定义是相似的,如果没有事先定义函数而直接引用就相当于在引用一个不存在变量名 定义阶段:只检测语法,不执行代码,当出现语法错误 ...