C/C++
文章平均质量分 56
帝壹
天道酬勤。
天助自助者。
展开
-
#ifdef和#if defined的区别
两者都有个define的作用,区别在于使用方式上。1、前者的通常用法是:#ifdef XXX ....#else ....#endif只能在两者中选择是否有定义。2、对于后者,常用法是:#if defined xxx1 .... #elif defined xxx2 ....#elif defined xxx3原创 2016-05-13 08:42:12 · 2638 阅读 · 0 评论 -
解读关键字volatile
一.volatile是什么?volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。二.编译器优化是什么意思?int i = 5;int a = i;……int b = i;编译器发现两次从i读数据的代码之间,并没有对i进行过操原创 2017-03-08 12:56:47 · 363 阅读 · 0 评论 -
makefile执行过程中的一些错误信息
make 执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“ - ”、或者 make 使用“ -k ”选项执行时。 make 执行过程的致命错误都带有前缀字符串“ * ”。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“ make ”);另外一种是当 Makefile 本身存在语法错误无法被 make 解析并执行时,前缀包含了 makefile 文件名和出现错误的行号。在下述的错误原创 2017-03-08 16:53:01 · 7244 阅读 · 1 评论 -
nginx的请求处理
nginx使用一个多进程模型来对外提供服务,其中一个master进程,多个worker进程。master进程负责管理nginx本身和其他worker进程。 所有实际上的业务处理逻辑都在worker进程。worker进程中有一个函数,执行无限循环,不断处理收到的来自客户端的请求,并进行处理,直到整个nginx服务被停止。 worker进程中,ngx_worker_process_cycle()函数转载 2017-03-08 22:33:12 · 322 阅读 · 0 评论 -
Nginx中的请求(nginx_http_request_t)
Nginx HTTP request这节我们讲request,在nginx中我们指的是http请求,具体到nginx中的数据结构是ngx_http_request_t。 ngx_http_request_t是对一个http请求的封装。 我们知道,一个http请求,包含请求行、请求头、请求体、响应行、响应头、响应体。http请求是典型的请求-响应类型的的网络协议,而http是文件协议,所以我们在分析转载 2017-03-08 22:22:37 · 3042 阅读 · 0 评论 -
ngx_http_request_t结构体
原文:http://blog.csdn.net/xiajun07061225/article/details/9189505 ngx_http_request_s是nginx中非常重要的一个结构体,贯穿于htpp请求处理的整个过程中。下面解释了ngx_http_request_s结构体中与HTTP框架相关的重要的成员变量。 struct ngx_http_request_s {转载 2017-03-08 22:57:58 · 593 阅读 · 0 评论 -
Nginx进程模型和事件模型
nginx性能高,而nginx的高性能与其架构是分不开的。那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧。nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。我们也可以手动地关掉后台模式,让nginx在前台运行,并且通过配置让nginx取消master进程,从而可以使nginx以单进程方式运行。很显然,原创 2017-03-05 17:48:38 · 1556 阅读 · 1 评论 -
C++之string类型详解
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个泛型类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 C++中对于strinig的定义为:typedef bas原创 2017-03-06 13:56:12 · 745 阅读 · 0 评论 -
CEF Windows开发环境搭建
CEF,Chromium Embedded FrameworkCEF,Chromium Embedded Framework的缩写。CEF 的官网介绍的很简洁:A simple framework for embedding chromium browser windows in other applications。具体地说就是一个可以将浏览器功能(页面渲染,JS 执行)嵌入到其他应用程序的框架。转载 2017-03-10 10:07:28 · 1663 阅读 · 0 评论 -
使用STL vector的几种清空容器(删除)办法
在vector中添加500个元素: vector <int> vecInt; for (int i=0;i<500;i++) { vecInt.push_back(i); } int j= vecInt.capacity(); //j=512 i = vecInt.size(); //i=500原创 2017-03-07 13:53:02 · 4546 阅读 · 0 评论 -
Linux中定位内存泄漏
1. 什么是内存泄漏内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的、大小任意的(内存块的大小可以在程序运行期决定)、使用完后必须显示释放的内存。应用程序一般使用malloc、realloc、new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块。否则,这块内存就不能被再次使用,造成这块内存泄漏。2. 内存泄漏的检测C++程序缺乏相应的手段来检测内存原创 2017-05-23 21:22:16 · 6645 阅读 · 1 评论 -
Makefile使用的一些心得
1、只更新.h头文件,make不能重新编译。需要在依赖文件列表中,把目标文件所依赖的.h文件添加上即可。main:main.o obj.o g++ -o $@ $^ main.o: g++ -c main.cppobj.o:obj.cpp g++ -c obj.cpp -o $@例如,目标文件obj.o需要依赖obj.h和obj.cpp,如果obj.h发生改变,但是其他文件原创 2017-03-03 15:39:45 · 552 阅读 · 0 评论 -
log4cpp之Layout布局
许多程序员心中理想的格式,应该是这样的: [2009-07-24 15:59:55,703] INFO : system is running [2009-07-24 15:59:55,703] WARN : system has a warning [2009-07-24 15:59:55,703] ERROR : system has a error, can’t find a原创 2017-03-03 16:09:42 · 925 阅读 · 0 评论 -
gprof优化程序代码
优化程序代码优化自己开发的程序,建议采用以下准则:二八法则: 在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的;在优化实践中,我们将精力集中在优化那20%最耗时的代码上,整体性能将有显著的提升;这个很好理解。函数A虽然代码量大,但在一次正常执行流程中,只调用了一次。而另一个函数B代码量比A小很多,但被调用了1000次。显然,我们更应关注B的优化。 编完原创 2017-02-15 17:06:41 · 374 阅读 · 0 评论 -
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct NULL not valid 主要原因:string对一个空指针进行操作。 例如:char* p = NULL:string str(p);原创 2016-05-17 10:38:13 · 5013 阅读 · 1 评论 -
使用BOOST库 多线程ThreadPool 编译错误"TIME_UTC was not declared in this scope"
原因:boost版本在1.50后,将该TIME_UTC这个名字修改为TIME_UTC_, 只需要将task_adaptors.hpp中的TIME_UTC修改为boost::TIME_UTC_即可.修改名字的原因是C++ 11定义了TIME_UTC这个宏,为了避免冲突需要作此修改。原创 2016-05-17 11:00:41 · 2334 阅读 · 0 评论 -
coredump详解
转:http://blog.csdn.net/tenfyguo/article/details/8159176一,什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做co转载 2016-06-27 16:09:52 · 31417 阅读 · 0 评论 -
Linux 内存共享陷阱及分析(shmget,shmat,shmdt,shmctl)
所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。共享内存的使用大大降低了在大规模数转载 2016-10-13 09:59:41 · 13391 阅读 · 0 评论 -
共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
共享内存函数(shmget、shmat、shmdt、shmctl)及其范例标签: c++内存共享 linux c++ 共享内存 c++ 共享内存 转自: http://blog.csdn.net/guoping16/article/details/6584058 共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。下面转载 2016-10-13 10:01:09 · 1513 阅读 · 0 评论 -
LINUX终端编程
如果想知道标准输出是否被重定向了,只需要检查底层的文件描述符是否关联到了一个终端即可。系统调用isatty就是用来完成这个任务的。 你只需要将有效的文件描述符传递给它,它就能判断是否连接到了一个终端。 Linux提供了一个特殊的设备/dev/tty来解决对终端的读写问题,这个设备始终指向当前终端或当前登录的会话,由于linux把一切事物都当作 文件来看,所以,我们可以像操作一般的文件来操作原创 2017-02-16 15:58:43 · 1014 阅读 · 0 评论 -
利用仿函数实现定制删除器
利用仿函数实现定制删除器转载 2017-02-10 15:29:03 · 335 阅读 · 0 评论 -
shared_ptr智能指针源码剖析
C++ 智能指针shared_ptr线程安全源码分析转载 2017-02-10 16:18:35 · 719 阅读 · 0 评论 -
C++的精髓——虚函数
虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};void Move();private:};class CChild转载 2017-03-01 13:22:22 · 314 阅读 · 0 评论 -
Makefile 中:= ?= += =的区别
新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = “Hello World!”elseendififeq ($(OPT),define) VRE ?= “Hello World! First!”endififeq ($(OPT),add) VRE += “Kelly!”endififeq ($(OPT),recover) VRE原创 2017-03-03 10:02:27 · 470 阅读 · 0 评论 -
找出数组中第k大的数(时间复杂度分析、C++代码实现). TopK in array. ( leetcode - 215 )
找出数组中第k大的数. TopK in array. ( leetcode - 215 )最近面试过程中遇到的一个题目,也是大数据时代常见的题目,就来总结一下。面试题目: 1、10亿数中,找出最大的100个数。用你能想到的最优的时间和空间效率。2、写出来之后,问时间空间复杂度是多少?如何计算?LeetCode 215:Find the kth largest elemen原创 2018-02-07 17:04:24 · 3749 阅读 · 0 评论