关闭

虚继承的概念

C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题。 class 派生类名:virtual 继承方式  基类名 virtual是关键字,声明该基类为派生类的虚...
阅读(83) 评论(0)

"undefined reference to" 问题解决方法

最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func'      关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。 1.  链接时缺失了相关目标文件(.o)...
阅读(72) 评论(0)

数据库中的锁机制和封锁协议

今天整理一下数据库中的锁机制和封锁协议,锁主要用于解决事务并发控制中产生的一些问题,在此之前我先列举一些相关的基本概念。 事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。(事务的四个特性:原子性,一致性,隔离性,持续性)并发控制:本文以单处理器系统为主,单处理器中多个用户并发地存取数据库就会产生多个事务同时存取同一数据的情况,若对并发操作不加控...
阅读(129) 评论(0)

select、poll和epoll

select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内...
阅读(165) 评论(0)

c++空类实例大小不是0原因

初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经验,是编译器这方面的一个具体功能. 首先:我们要知道什么是类的实例化,所谓类的实例化就是在内存中分...
阅读(113) 评论(0)

系统调用和库函数及API的区别

转载原文:http://blog.csdn.net/gogokongyin/article/details/51303624            在写程序的过程中,像MFC,VC++这些编程,都会涉及到函数的调用,有库函数也有系统函数,下面看一看它们的区别!!            系统调用(system call)和库函数调用(Library function call)的区别?...
阅读(238) 评论(0)

孤儿进程与僵尸进程[总结]

1、前言  看到大牛前辈 这篇文章,受益颇深,特意转载过来跟大家分享!2、基本概念  我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。  孤儿进程:一...
阅读(102) 评论(0)

Linux写时复制技术(copy-on-write)

COW技术初窥:       在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。       那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?       在fork之后exec之前两个进程用的是相同...
阅读(187) 评论(0)

VMware中安装gcc和升级gdb的方法

今天换了一台电脑,没装ubuntu,所以先装了个VMware用一段时间。VMware默认是没有安装gcc的,且默认的gdb版本比较低,不能和gcc一起debug,所以需要自己动手安装和升级,我把这个过程记录下来,跟大家分享一下。 1、安装gcc 未安装之前,用gcc编译会提示error trying to exec 'cc1plus': execvp: No such file or dire...
阅读(154) 评论(0)

数组指针与指针数组

指针数组和数组指针的概念非常容易混淆,今天在这里整理一下。 先看一下二者的定义: 数组指针:int (*p)[4];   //p是指向数组的指针,本身是一个指针。 指针数组:int *q[4];     //q是一个包含4个元素的数组,每个元素是一个int型的指针。 接下来通过代码感受一下: #include using namespace std; int main() {...
阅读(90) 评论(0)

类内定义的成员函数是内联函数

之前看书的时候没有注意到这点,今天再翻primer发现了这句话,感觉好神奇,特意来做个笔记!在类内定义的成员函数默认为inline,不论前面是否加了inline,当然,是否内联还是取决于编译器啦~而在类外定义的成员函数就不是内联函数。...
阅读(229) 评论(0)

Bash基本命令整理

BASH 的基本语法 ·          最简单的例子 —— Hello World! ·          关于输入、输出和错误输出 ·          BASH 中对变量的规定(与 C 语言的异同) ·          BASH 中的基本流程控制语法 ·          函数的使用 2.1     最简单的例子 —— Hello World! 几乎所有的讲解编程的书给读者...
阅读(180) 评论(0)

linux网络协议栈内核分析

1. Linux 网络路径1.1 发送端1.1.1 应用层 (1) Socket 应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的。Linux Socket 是从 BSD Socket 发展而来的,它是 Linux 操作系统的重要组成部分之一,它是网络应用程序的基础。从层次上来说,它位于应用层,是操作系统为应用程序员提供的 API,通过它,应用...
阅读(212) 评论(0)

C++ 预处理、编译、汇编、链接

一个C++程序一般需要经过以下几个步骤才能成为可执行程序:那么,在以上的每一步中,编译器到底做了哪些工作呢? 一、编译器预处理 C++编译器自带预处理器,在程序编译之前,由预处理器对C++源程序完成预处理工作。 预处理主要将源程序中的宏定义指令、条件编译指令、头文件包含指令以及特殊符号完成相应的替换工作。 预处理指令#include用于包含头文件,有两种形式:#include ,#in...
阅读(144) 评论(0)

Linux中的文件描述符与打开文件之间的关系

转载请说明出处:http://blog.csdn.net/cywosp/article/details/389652391. 概述    在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统...
阅读(155) 评论(0)
42条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:6631次
    • 积分:228
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:31篇
    • 译文:0篇
    • 评论:0条
    文章分类