c++
文章平均质量分 94
hai0808
这个作者很懒,什么都没留下…
展开
-
伙伴系统的概述
阅读目录什么是伙伴系统? 相关的数据结构正文Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先讨论外部碎片问题。避免外部碎片的方法有两种:一种是之前介绍过的利用非连续内存的分配;另外一种则是用一种有效的方法来监视内存,保证在内核只要申请一小块内存的情况下,不会从大块的连续空闲内存中截取一段过来,从而保证了大块内存的连续性和完整性。显然,前者不能成为解决问题的普遍方法,.转载 2021-06-16 19:56:02 · 1619 阅读 · 0 评论 -
gprof使用介绍 (gcc -pg)
linux服务端编程,性能总是不可避免要思考的问题。而单机(严格的说是单核)单线程程序(严格的说是逻辑)又是所有复杂应用的基础。所以,这块的性能是整个应用的基础。当遇到应用相应很慢的时候我们往往会疑问:这么强劲的CPU到底在干什么,反应这么慢。满足你!linux下常用的性能工具就是跟gcc一起的gprof。来个例子程序:#include <stdio.h>#include <stdlib.h>void f1() {int i;int *p;for (i = 0; i转载 2020-06-02 09:44:59 · 948 阅读 · 0 评论 -
使用gcc的-finstrument-functions选项进行函数跟踪
GCC Function instrumentation机制可以用来跟踪函数的调用关系,在gcc中对应的选项为“-finstrument-functions”。可查看gcc的man page来获取更详细信息。编译时如果为gcc加上“-finstrument-functions”选项,那在每个函数的入口和出口处会各增加一个额外的hook函数的调用,增加的这两个函数分别为:[cpp] view pla...转载 2018-04-10 11:31:02 · 929 阅读 · 0 评论 -
C++ 在线编译器(支持 C++11)
C++11 的 Inheriting constructors 特性在 GCC 4.8 以前的版本及 VS2013 中都没有支持,测试起来比较麻烦,所以搜集到了几个支持 GCC 4.8 及更高版本的在线编译器。http://ideone.com/http://coliru.stacked-crooked.com/http://gcc.godbolt.org/http://liveworkspace...转载 2018-03-07 15:01:24 · 7955 阅读 · 0 评论 -
linux 添加动态链接库路径
12export LD_LIBRARY_PATH=你的库的路径:$LD_LIBRARY_PATHecho $LD_LIBRARY_PATHlinux 默认回去/lib和/usr/lib目录下查找库,可以通过ln建立软连接 转:1. 连接和运行时库文件搜索路径到设置库文件在连接(静态库和共享库转载 2018-01-09 14:00:08 · 32862 阅读 · 0 评论 -
C语言标准库函数getenv的实现
C语言标准库函数getenv可获取环境参数(根据参数名称),函数声明:char* getenv(char*name);extern char **environ其实现如下:---------------glibc-1.09.1/sysdeps/generic/getenv.c[cpp] view plain copy/* Re转载 2018-01-24 18:40:46 · 670 阅读 · 0 评论 -
CMake添加-g编译选项
在文件 CMakeLists.txt添加下面一条语句add_definitions("-Wall -g")原创 2018-01-12 16:57:14 · 32556 阅读 · 7 评论 -
c++11
当g++编译器版本大于 4.8.1时编译程序__cplusplus宏定义值是199711编译选项加上 -std=gnu++11 时 宏定义__cplusplus值是201103低版本宏定义__cplusplus值是1并且不支持编译选项 -std=gnu++11原创 2017-12-27 10:33:40 · 292 阅读 · 0 评论 -
文章标题
这篇文章非常好,所以转载了下来,作为收藏。topGDB概述 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许 ,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如 果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、 BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就 是这个道理。 一般来说,GDB主要帮忙你完成下转载 2017-11-30 16:20:00 · 147 阅读 · 0 评论 -
C和C++数组的用法
c代码(C++不能这样写)#include<stdlib.h>#include<stdio.h>int main(){ enum{ FIRST = 0, SECOND, }; const char *str[]= { [FIRST] = "first", [SECOND] = "second",原创 2017-11-29 10:15:14 · 249 阅读 · 0 评论 -
C++拷贝构造函数的参数为什么必须使用引用类型(无限递归)
在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识。 但是如果我问你“拷贝构造函数的参数为什么必须使用引用类型?”这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭愧的是,我的第一感觉也是这么回答。不好还好,我有理性这个好品质。思索一下以后,发现这个答案是不对的。让我来撕开(有点暴力,但是我喜欢,嘿嘿--龇牙)那件隐藏在真理外...转载 2018-05-19 12:42:56 · 815 阅读 · 1 评论 -
STL中map/vector的删除元素操作
在我们使用C++中的STL的时候,可以使用迭代器iterator进行遍历,但是当我们通过iterator对vector和map删除元素的时候,要格外的小心,往往操作不当,导致iterator失效,后果就是程序奔溃。 1. 对于vector,erase会返回下一个iterator。所以一般采用的方法是: 因为在使用erase的时候,删除元素前面的iterator有效,但是后面的ite...转载 2018-06-04 16:01:07 · 1387 阅读 · 0 评论 -
C++11学习之share_ptr和weak_ptr
因为最近公司项目需要使用C++11,本文是在我学习share_ptr和weak_ptr过程中整理网上的资料进行写的.如有错误之处,还望小伙伴们踊跃留言. 参考资料: http://blog.csdn.net/jiangfuqiang/article/details/8292906 http://blog.csdn.net/solstice/article/details/6395098一、shar...转载 2018-05-31 19:39:10 · 401 阅读 · 0 评论 -
C++this指针操作
在这里总结一下this 指针的相关知识点。 首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。注:this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。th...转载 2019-03-12 09:42:38 · 991 阅读 · 0 评论 -
单例模式多线程安全实现
#include<pthread.h>template<typename T>class Singleton{public: static T& instance() { pthread_once(&ponce_, &Singleton::init); return *value_; ...转载 2019-02-27 10:54:04 · 264 阅读 · 0 评论 -
C++中nothrow的介绍及使用
在C中,使用malloc等分配内存的函数时,一定要检查其返回值是否为”空指针”,并以此作为检查内存操作是否成功的依据,这种Test-for-NULL代码形式是一种良好的编程习惯,也是编写可靠程序所必需的。在C++中new在申请内存失败时默认会抛出一个std::bad_alloc 异常。如果出现这个异常,那就意味着内存耗尽,或者有其它原因导致内存分配失败。所以,按照C++标准,如果想检查new是...转载 2019-01-24 17:05:07 · 3925 阅读 · 0 评论 -
ngx对accept加锁操作
对文件加锁,但里面的数据是错误的,先记录下,以后回来看,是缓冲造成的???。用共享内存操作是正确的#include<fcntl.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/ipc.h>...原创 2018-12-26 11:39:11 · 196 阅读 · 0 评论 -
实现线程安全的单例模式
在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式。单例模式分为懒汉模式,跟饿汉模式两种。首先给出饿汉模式的实现template <class T>class singleton{protected: singleton(){};private: singleton(const singleton&){};//禁止拷贝 ...转载 2018-08-31 09:53:00 · 713 阅读 · 0 评论 -
身份证校验
int IsRight(string card){ int error=0; int length=(int)card.length(); if (length < 10) { error=-5; return error; } cout<<length<<endl; int index=card.find_first_not_...转载 2018-08-16 16:33:30 · 528 阅读 · 0 评论 -
linux c/c++ 判断是否为中文(不包括中文符号,非正则)
在linux环境下,c/c++默认的中文编码为UTF-8,中文的unicode编码是双字节的编码。有趣的是,windows环境下中文utf-8的编码为两个字节,而linux环境下UTF-8的为三个字节,而匹配中文使用正则表达式为 [\u4e00-\u9fa5]无论你是怎么搜索,百度出来匹配中文的正则基本都是上述的表达式。因此linux环境下3字节的UTF-8也用这个正则来匹配显然是...转载 2018-08-16 15:58:36 · 1600 阅读 · 2 评论 -
g++编译后运行时无法链接动态库的解决方法
问题发现:$g++ -Wall -o hellobrowser.exec hellobrowser.c -I/usr/local/include-L/usr/local/lib -lmicrohttpd -ldl$./hellobrowser.execerrorwhile loading shared libraries: libmicrohttpd.so.10: cannot...转载 2018-07-23 15:54:37 · 3374 阅读 · 4 评论 -
循环引用
#include<memory>#include<iostream>using namespace std;class Child;class Parent{public: shared_ptr<Child> c; ~Parent(){ cout << "delete p" << endl;}};class C...转载 2018-05-31 19:55:55 · 121 阅读 · 0 评论 -
内存空间分几部分:代码段、数据段,栈,堆 (收集整理)
1.函数代码存放在代码段。声明的类如果从未使用,则在编译时,会优化掉,其成员函数不占代码段空间。全局变量或静态变量,放在数据段,局部变量放在栈中,用new产生的对象放在堆中,内存分为4段,栈区,堆区,代码区,全局变量区BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by转载 2017-06-19 09:24:31 · 1104 阅读 · 0 评论 -
Makefile
CC:=g++CFLAGS:=-gTARGET:=ServerINCLUDE:=-I ../../WebsocketProtocol/src/ -I ../../../PushFramework/include -I ../../../PushFramework -I ../../../PushFramework/privateLIBDIR=-L ../../../output/原创 2016-10-31 15:16:25 · 199 阅读 · 0 评论 -
framebuffer显示JPEG图片
framebuffer显示JPEG图片 2011-05-03 20:14:45分类: 嵌入式转自http://www.linuxsense.org/archives/281.htmlhttp://kb.cnblogs.com/a/1526327/ apt-get install libjpeg62编译的时候应该加上 -ljpeg转载 2015-11-13 15:32:00 · 2359 阅读 · 0 评论 -
使用libjpeg显示JPEG图像在framebuffer 测试(八)
2011-05-03 21:00:46分类: 嵌入式 本文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:yuweixian4230@163.com博客:yuweixian4230.blog.chinaunix.net转载 2015-11-13 15:51:31 · 888 阅读 · 0 评论 -
小结 frambuffer 原理及流程 (五)
本文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:yuweixian4230@163.com博客:yuweixian4230.blog.chinaunix.net 通过学习,加深对framebuffer的了解,现在记录下 对 framebuf转载 2015-11-13 10:28:40 · 997 阅读 · 0 评论 -
ubuntu下载开源代码包
https://launchpad.net/ubuntu/+source/cairo原创 2015-11-12 17:12:51 · 475 阅读 · 0 评论 -
framebuffer
Linux操作系统下使用FrameBuffer直接写屏2011-03-28 11:42:08分类: 因为Linux是工作在保护模式下,所以用户态进程是无法象Dos那样使用显卡BIOS里提供的中断调用来实现直接写屏,故Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。在继续下面的之前,先说明几个背景知识:FrameBuffer主要是根据VE转载 2015-11-11 16:11:11 · 445 阅读 · 0 评论 -
framebuffer结构体分析
转载出处 http://blog.chinaunix.net/uid-22666248-id-284148.htmlfb_fix_screeninfo fb_var_screeninfo结构体测试 四)2011-05-03 12:45:15 分类: 嵌入式我敲写了一遍 程序,然后补充了 fb_fix_screeninfo 和 fb_var_screeninfo 结构体转载 2015-11-12 09:50:24 · 841 阅读 · 0 评论 -
Framebuffer 画点,画线,画多边形,画圆
转自 http://blog.chinaunix.net/uid-22666248-id-283558.html#include stdio.h>#include stdlib.h>#include string.h>#include math.h>#include stdint.h>#include unistd.h>#include fcntl.转载 2015-11-12 10:24:06 · 2934 阅读 · 0 评论 -
linux -- framebuff驱动总结
linux -- framebuff驱动总结http://www.cnblogs.com/zym0805/archive/2011/08/08/2131178.html一、FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。 Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIO转载 2015-11-12 11:39:00 · 1854 阅读 · 0 评论 -
一个类里可以注册不同类型的消息及boost:function和boost:bind的使用
///////////////////////////////////////////////////////////////////////////////////////////////////////BaseClass.h#ifndef _BASECLASS_H_#define _BASECLASS_H_#include "boost/function.hpp"#incl原创 2015-09-17 15:25:03 · 505 阅读 · 0 评论 -
boost::function 和boost::bind
#ifndef _BASECLASS_H_#define _BASECLASS_H_#include "boost/function.hpp"#include "boost/bind.hpp"#include#include#includeusing namespace std;typedef struct Func{boost::function原创 2015-09-17 16:37:56 · 379 阅读 · 0 评论 -
framebuffer小程序显示3个矩形 测试
本文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:yuweixian4230@163.com博客:yuweixian4230.blog.chinaunix.net 网址 http://www.cnblogs.com/cute/arc转载 2015-11-13 10:34:04 · 1831 阅读 · 2 评论 -
动手写 framebuffer 画点、划线程序 (七)
文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:yuweixian4230@163.com博客:yuweixian4230.blog.chinaunix.net 简单实现了 画点、划线、画矩形的程序编写,没有时间去编写其他的了,以后具体做到的这方转载 2015-11-13 10:56:27 · 1621 阅读 · 1 评论 -
C++ 标准库中的异常
#include#include #include using namespace std;class CException:public std::exception{public:std::string s;CException(std::string ss):s(ss){}~CException()throw(){}const原创 2016-10-28 10:48:34 · 541 阅读 · 0 评论 -
C++ 标准库中的异常
1. 相关定义标准库 c++ 异常类基类 std::exception 定义在文件 exception 中。class exception { public: exception() throw() { } virtual ~exception() throw(); /** Returns a C-style character string de转载 2016-10-28 10:47:47 · 471 阅读 · 0 评论 -
./configure -build,-host,-target设置
./configure -build,-host,-target设置build:执行代码编译的主机,正常的话就是你的主机系统。这个参数一般由config.guess来猜就可以。当然自己指定也可以。host:编译出来的二进制程序所执行的主机,因为绝大多数是如果本机编译,本机执行。所以这个值就等于build。只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同转载 2016-10-12 17:08:56 · 686 阅读 · 0 评论 -
编译内核错误
编译64位内核kernel/timeconst.pl问题解决Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373. 其实,提示的错误信息已经明确告诉你了,你应该省略defined().这里,我们打开 kernel/time转载 2016-08-21 20:47:00 · 385 阅读 · 0 评论