c++
文章平均质量分 67
多少个明天_指上流年
这个作者很懒,什么都没留下…
展开
-
对常见锁的总结
锁的分类最一般的情形:如果在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞,Core0会在此时进行上下文切换(Context Switch)将线程A置于等待队列中,此时Core0就可以运行其它的任务而不必进行等待。1、互斥锁(mutex)同一时间只能有一个线程对共享资源进行加锁,在A线程加锁未释放的情况下,B线程再试图加锁会导致B线程原创 2021-07-07 23:19:46 · 299 阅读 · 0 评论 -
vector中存放指针变量问题
vector中存放指针变量,当vector销毁,或者调用erase操作时是否会释放指针变量内部分配的内存?class test {public: test(){} ~test(){ cout << "xigou" << endl; }};void fun(){ vector<test*> ttt; test* t = new test(); ttt.push_back(t); ttt.clear();}结果并没有执行test的析构函数,原创 2020-08-23 20:36:32 · 682 阅读 · 0 评论 -
字节对齐和#pragma pack
#pragma pack这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。#pragma pack (n) :C编译器将按照n个字节对齐。#pragma pack () :取消自定义字节对齐方式。#pragma pack (push,1) :是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐#pragma pack(pop) :恢复对齐状态字节对齐方式:1、字节内每个变量分别对齐,(每个变量基于结构体起始地址的偏移量为该变原创 2020-08-22 10:20:59 · 229 阅读 · 0 评论 -
c++ 多线程锁(c++11)
互斥锁Mutex属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞,Core0会在此时进行上下文切换(Context Switch)将线程A置于等待队列中,此时Core0就可以运行其它的...翻译 2020-04-28 16:18:41 · 662 阅读 · 0 评论 -
什么是RAII?
RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。链接:https...翻译 2020-04-28 15:29:05 · 560 阅读 · 0 评论 -
c/c++文件操作总结
计算机在物理内存上面存放的都是二进制,所以文本文件和二进制文件的主要区别是在逻辑上的而不是物理上的。而从文件的编码方式来看,文件可以分为文本文件和二进制文件。文本文件是基于字符编码的文件,常见的有ASCII、Unicode等,二进制文件是基于值编码的文件,可以看成是变长编码,你可以根据自己的需要,决定多少个比特代表一个值。从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。(...原创 2020-04-21 18:45:27 · 213 阅读 · 0 评论 -
c++ 关键字
c++ explicit跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)explicit可以防止隐式转换的发生,explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了例如:一个类A的构造函数A(int i)就是,既可以用来作...原创 2019-12-19 15:15:54 · 243 阅读 · 0 评论 -
_CRT_SECURE_NO_WARNINGS
在vs中编译fopen 、sprintf等函数时提示 类似:Warning 1 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online...原创 2019-07-03 11:22:44 · 247 阅读 · 0 评论 -
mongodb数据库 linux下编译mongodb的c++驱动
由于工作项目开发的需要 要使用mongodb数据库 需要手动编译mongo的c++库,花费了大概两天的时间,终于搞定,主要是上网搜资料。以下是本人收藏的几篇博客https://mongodb.github.io/mongo-cxx-driver/legacy-v1/官网的安装教程https://github.com/mongodb/mongo-cxx-driver/releases原创 2016-11-16 19:44:54 · 1185 阅读 · 0 评论 -
如何编写makefile(二)
一下是找的几条makefile编写方法的别人的博客链接:http://www.liweifan.com/2011/11/15/embedded-system-liunux-gnu-makefile-function/http://www.cnblogs.com/luchen927/archive/2012/02/05/2339002.htmlhttp://so.csdn.net/so/转载 2016-07-29 15:50:46 · 186 阅读 · 0 评论 -
如何编写makefile(一)
在默认的方式下,也就是我们只输入make命令。那么, 1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。 3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edi转载 2016-07-29 15:43:08 · 254 阅读 · 0 评论 -
VS2008下直接安装使用Boost库1.46.1版本
Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。 Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)转载 2016-07-13 10:56:33 · 369 阅读 · 0 评论