zoukankan      html  css  js  c++  java
  • 一些关于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了某个宏导致的问题

  • 相关阅读:
    github登录不上?!
    js -- even-loop 理解
    前端面试积累(整理中)
    各个ctr算法的比较
    常用ctr算法比较
    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
    Attention is All You Need
    理解word2vec
    EDA时的画图函数
    alphogo 理解
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7291111.html
Copyright © 2011-2022 走看看