
C++
ycf74514
好读书、求甚解
展开
-
xv6进程调度代码
最近在研究libco,看到协程切换运行,于是想到很早之前看的xv6,于是翻了一下代码,看看进程调度,以及上下文切换的部分,怀念那段撸OS的日子// Per-CPU process scheduler.// Each CPU calls scheduler() after setting itself up.// Scheduler never returns. It lo原创 2017-08-20 08:46:51 · 1779 阅读 · 0 评论 -
ucontext实现协程
转载自:http://blog.youkuaiyun.com/qq910894904/article/details/41911175目录(?)[+]1.干货写在前面协程是一种用户态的轻量级线程。本篇主要研究协程的C/C++的实现。首先我们可以看看有哪些语言已经具备协程语义:比较重量级的有C#、erlang、golang*轻量级有python、lua、j转载 2015-12-07 17:09:37 · 593 阅读 · 0 评论 -
解决Mac下GDB提示签名错误
解决Mac下GDB提示签名错误原文作者:Power 转载请保留此链接。安装GDB新的Mac下有gcc、g++,但是没有gdb有人说安装XCode就有,但是我真没有通过Homebrew安装,没有的执行安装brew命令ruby -e "$(curl -fsSLk https://raw.github.com/Homebrew/homebrew/go/install)"然后安转载 2015-11-28 21:45:18 · 1229 阅读 · 0 评论 -
Why Not Specialize Function Templates
Why Not Specialize Function Templates?This article appeared in C/C++ Users Journal, 19(7), July 2001. While the title of this article is a question, it could also be made into a statement: this转载 2015-12-29 13:24:51 · 424 阅读 · 0 评论 -
C++得到成员变量的偏移值
一:零地址转换以下为MFC常用宏:#define OFFSET(structure, member) ((int)&((structure*)0)->member); #include #define GET(A,m) (int)(&((A*)0)->m); using namespace std; struct A{原创 2015-11-26 23:07:05 · 3121 阅读 · 1 评论 -
C/C++与Python混合编程
作者:Jho Jerry链接:http://www.zhihu.com/question/23003213/answer/56121859来源:知乎以下讨论中,Python指它的标准实现,即CPython(虽然不是很严格)本文分4个部分C/C++ 调用 Python (基础篇)— 仅讨论Python官方提供的实现方式Python 调用 C/C++ (基础篇)— 仅讨转载 2015-11-19 09:44:30 · 2929 阅读 · 0 评论 -
绝不重新定义继承而来的缺省参数值--from Effective c++ item 37
重温Effective c++Item 37,Never redefine a function's inherited default parameter value. 虚函数的调用,以及VFP的实现机制,应该已经很清楚了。虚函数通过动态绑定,在通过指针和引用调用的时候,通过实际指向的对象的虚函数列表得到要调用的函数的地址。但是一直不清楚的是,如果派生类重新定义了原创 2015-11-17 23:20:37 · 597 阅读 · 0 评论 -
C++中关于public、protect、private的访问权限控制
一:成员的访问权限1: public访问权限 一个类的public成员变量、成员函数,可以通过类的成员函数、类的实例变量进行访问 #include#includeusing namespace std;class AccessTest{ public: int pub_mem; int pub_fun(){}; protected:原创 2015-10-11 21:29:33 · 20778 阅读 · 7 评论 -
C++中继承覆写导致基类的成员不可见
在C++中,基类定义了一个成员函数 f(),派生类定义了一个成员函数 f(int),然后派生类来调用:pDerieved->f(),结果会怎样?派生类的重载定义,会导致基类的函数在名称查找的时候,不可见。但是C++的设计哲学,又可以让你用using声明实现基类成员函数在派生类中重载。代码一:#include#includeusing namespace std;c原创 2015-10-12 01:23:12 · 478 阅读 · 0 评论 -
C++ 虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2015-10-12 11:42:58 · 315 阅读 · 0 评论 -
C++中的struct和class的区别
来自:http://hi.baidu.com/pengxiangbobin19890125/blog/item/b05586eee77300212df53411.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能否包含构造和析构转载 2015-10-06 14:35:24 · 463 阅读 · 0 评论 -
Linux下程序的Profile工具
我们在写程序,特别是嵌入式程序的时候,通常需要对程序的性能进行分析,以便程序能够更快更好地运行,达到实时(real-time)的目的。如果程序很大,分析起来就很困难。如果有个工具能够自动进行程序的性能分析,那就最好了。这里介绍一种Linux下程序的Profiling工具----GNU profiler。gprof的基本用法:1. 使用 -pg 选项编译和链接你的应用程序转载 2015-10-20 17:02:25 · 486 阅读 · 0 评论 -
C++中内联函数何时被编译器禁止?
C++当中定义内联函数,可以让编译器将对内联函数的调用直接展开。这就多少有点像宏定义了,而且没有宏定义的缺点(预处理替换,无法当成变量、调用有可能导致参数异常被改、等等)。使用内联函数可以避免函数调用的开销(栈开辟、返回地址设定、栈展开),在一定的程度上可以提高程序的性能。但是这种提高是有代价的。编译器将函数展开,会直接导致可执行程序变大。(导致运行缺页、cache命中原创 2015-10-06 17:49:22 · 3885 阅读 · 0 评论 -
C++以对象作为返回值时编译器的优化,以及临时变量的析构时机
C++以对象返回编译器的优化,以及临时变量的析构时机原创 2015-10-06 03:17:43 · 850 阅读 · 1 评论 -
UNIX下的LD_PRELOAD环境变量
前言 也许这个话题并不新鲜,因为LD_PRELOAD所产生的问题由来已久。不过,在这里,我还是想讨论一下这个环境变量。因为这个环境变量所带来的安全问题非常严重,值得所有的Unix下的程序员的注意。 在开始讲述为什么要当心LD_PRELOAD环境变量之前,请让我先说明一下程序的链接。所谓链接,也就是说编译器找到程序中所引用的函数或全局变量所存在的位置。一般来说,程序的链转载 2015-10-05 13:45:19 · 468 阅读 · 0 评论 -
KMP算法(C++实现)
自己实现了一个KMP算法,竟然要写将近100行,看着树上伪码那么精炼,一股自卑感油然而生,自己真是个战五渣啊...............#include#includeusing namespace std;int GenerateNextArray(const string &sub,int *array){ //-1表示,不光子串,匹配的主串也要往后挪原创 2015-09-29 10:13:36 · 446 阅读 · 0 评论 -
理解堆栈及其利用方法
堆栈基础篇:1、堆栈结构从广义上来讲,堆栈其实就是一种后进先出的数据结构,这跟队列的作用正好相反, 你可以定义一个数组或用malloc分配一块内存来模拟堆栈的作用, 比如openjdk的解释器就要用到堆栈结构来做计算。我们在从c的角度来仔细审视下堆栈的结构,本文以intel体系结构为例。intel处理器定义了跟堆栈有关的几个寄存器:esp/rsp: 保存了当前堆栈栈顶指针的寄转载 2015-09-26 23:12:26 · 749 阅读 · 0 评论 -
关于const关键字
C++的const关键字标记了一个变量(或者函数)的常量属性,程序员通过const关键字告诉编译器:这个变量是不可修改的常量,任何企图对其进行修改的操作不要通过编译。const关键字的使用比较容易混淆,参考《Effective C++》现总结如下:1:通过const关键字替代替代宏定义 (item 2:prefer consts enums,inlines to #d原创 2015-09-28 15:22:29 · 420 阅读 · 0 评论