- 博客(23)
- 资源 (16)
- 收藏
- 关注
转载 C++ 对象的内存布局(上)---陈皓改进版
前言查看本文之前最好先看这篇文章:C++ 虚函数表解析---陈皓改进版07年12月,我写了一篇《C++ 虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机理上的问题,也是为了图一些表达上方便...
2018-08-31 20:40:50 2226
转载 不同编译器虚函数的实现方式的区别
class base { virtual void f1() {}};base bs;问:“为什么bs虚函数表的地址(int*)(&bs)与虚函数f1()地址(int*)*(int*)(&bs) 不是同一个?”注:题主理解错了,其实(int*)(&bs)是对象bs的地址,即虚函数表的地址的地址。(int*)*(int*)(&bs)才是虚函数表地址...
2018-08-31 12:56:47 819
转载 C++ 虚函数表解析---陈皓改进版
修正了一些原文中的错误。前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术(Run-Time Type Identification),虚函数技术,要...
2018-08-29 22:36:35 3608 7
原创 C++ public、protected 、 private和friend(最通俗易懂)
C++ 继承面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行时间的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物...
2018-08-29 20:35:44 17338 2
原创 sizeof与strlen的区别和#pragma pack的具体含义(非常详细)
char str[20]="0123456789"; int a=strlen(str); // a=10;strlen 计算字符串的长度,以'\0'为字符串结束标记,长度不包括'\0'。 int b=sizeof(str); // b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响。 #pragma pack的具体含义...
2018-08-29 14:22:16 440
转载 Linux下C++多线程编程(入门实例)
C++ 多线程多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。基于进程的多任务处理是程序的并发执行。 基于线程的多任务处理是同一程序的片段的并发执行。多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。本教程假设您使用的是 Linu...
2018-08-29 00:39:18 21507 2
原创 VS工程属性“字符集”和源文件“高级保存选项”字符集区别
项目--属性--设置属性--常规--字符集,VS2015默认为Unicode字符集。一、工程字符集属性工程属性里,字符集可以选择“使用Unicode字符集”和“使用多字节字符集”。此选项只控制代码里的API是用宽字符版(即Unicode)的还是ANSI字符版(即GBK)的,它控制不了代码里的字符是用Unicode编码还是ANSI编码。如果选择了“使用Unicode字符集”,则...
2018-08-28 22:17:57 3328
转载 宽字符标量L"xx"在VC6.0/7.0和GNU g++中的不同实现。
锲子:本文源于在VCKBASE C++论坛和周星星大哥的一番讨论,这才使我追根索源,找到了理论依据和实践的证明。(本文一些资料和测试代码由周星星提供)《The C++ Programming Language 3rd》中有这么两段话:from 4.3:A type wchar_ t is provided to hold characters of a larger character s...
2018-08-28 19:59:13 311
转载 Windows下C++多线程编程(入门实例)
多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平。 其实C++语言本身并没有提供多线程机制(当然目前C++ 11新特性中,已经可以使用std::thread来创建线程了,因为还没有系统地了解过,所以这里不提了。),但Windows系统为我们提供了相关API,我们可以使用他们来进行多线程编程。创建线...
2018-08-28 18:44:09 62474 10
原创 Windows和Linux进程与线程的区别
对于windows来说,进程和线程的概念都是有着明确定义的,进程的概念对应于一个程序的运行实例(instance),而线程则是程序代码执行的最小单元。也就是说windows对于进程和线程的定义是与经典OS课程中所教授的进程、线程概念相一致的。提供API,CreateThread()用于建立一个新的线程,传递线程函数的入口地址和调用参数给新建的线程,然后新线程就开始执行了。windows下,...
2018-08-28 17:14:25 5632 3
转载 孤儿进程与僵尸进程[总结]
1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的...
2018-08-27 20:11:43 192
转载 程序,进程,线程的区别和联系
进程和程序区别和联系表现在以下方面:1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映了一个程序在一定的数据集上运行的全部动态过程。2)进程和程序并不是一一对应的,一个程序执行在不同的数据集上...
2018-08-26 22:27:18 57782 8
原创 调用约定__cdecl、__stdcall和__fastcall的区别
什么是调用约定函数的调用约定,顾名思义就是对函数调用的一个约束和规定(规范),描述了函数参数是怎么传递和由谁清除堆栈的。它决定以下内容:(1)函数参数的压栈顺序,(2)由调用者还是被调用者把参数弹出栈,(3)以及产生函数修饰名的方法。历史背景在微机出现之前,计算机厂商几乎都会提供一份操作系统和为不同编程语言编写的编译器。平台所使用的调用约定都是由厂商的软件实现定义的。 在Apple...
2018-08-26 21:12:08 15897 3
转载 为什么ICMP的ping和tracert不经过tcp或udp?
答:希望用图片的形式能帮你建立起OSI分层的概念,更多细节需要你阅读教材。图1至图4展示了一个完整的ICMP报文。图1可见,该报文的结构为:Frame,Ethernet,IP,ICMP。选中Frame可以看到整个报文都被选中。图1 选择Ethernet后,如图2显示。下面被选中的数据就是Ethernet报文的头部,Ethernet位于数据链路层。那Ethernet的数据部在...
2018-08-26 19:47:37 9913 2
转载 socket为什么要翻译成套接字?
问:socket的英文原义是“孔”或“插座”,这个多好理解,套什么接什么字?答:作为一条刻(wu)苦(liao)钻(tou)研(ding)的IT狗,告诉你……不……可……考……理论上对于计算机界的新名词,我们国家有个中国计算机学会,下面有个“计算机术语审定工作委员会”,其职责就是“负责计算机新术语的审定工作,收集、翻译、释义、审定和推荐计算机术语,将审定过的新术语报全国名词审定委员会,...
2018-08-26 18:46:27 3159 9
转载 bfptr算法(即中位数的中位数算法)
BFPRT算法是解决从n个数中选择第k大或第k小的数这个经典问题的著名算法,但很多人并不了解其细节。本文将首先介绍求解这个第k小数字问题的几个思路,然后重点介绍在最坏情况下复杂度仍然为O(n)的BFPRT算法。一 基本思路关于选择第k小的数字有许多方法,其效率和复杂度各不一样,可以根据实际情况进行选择。将n个数排序(比如快速排序或归并排序),选取排序后的第k个数,时间复杂度为O(nlo...
2018-08-25 22:35:16 22585 1
原创 数据库并发控制技术
事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元,也是恢复和并发控制的基本单位。事务处理技术主要包括数据库恢复技术和并发控制技术。本篇博文主要总结下并发控制技术。事务:是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。一般来说,一个程序中包含多个事务。ACID,是...
2018-08-25 14:27:19 3840
转载 关于栈、堆、静态存储区最大可分配大小的探讨
中午看《编程之美》的第2.5节中有这么一小段程序:float array[100000000];这个1亿个float变量,这样就有8亿个字节,转化为二进制单位G,就是小于等于1G。这样大小的数组量只能用堆(动态申请内存变量)或者静态存储区(全局变量)来申请。好了,转入今天要讲的正题。到底栈、堆、静态存储区能申请的最大分配大小是多少呢?栈(stack)栈大小与编译器有关。默认...
2018-08-23 16:26:53 3796
转载 printf,wprintf与setlocale,char与wchar_t区别
#include <stdio.h>#include <wchar.h>int main(void) { char str[] = "中文"; wchar_t wstr[] = L"中文"; printf("1:%s\n", str); wprintf(L"2:%s\n", wstr); return 0;}Windows
2018-08-08 16:24:00 1609
原创 C++常量表达式、const、constexpr(C++11新增)的区别
常量表达式是指值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式。例1:#include <iostream>using namespace std;int main(){ const int a1 = 10; // a1是常量表达式。 const int a2 = a1 + 20; // a2是常量表达...
2018-08-05 14:01:03 2997 2
原创 C++中class和typename的区别
由于历史原因,以前是用class,后来C++ Standard 出现后,引入了typename, 所以他们基本上是一样的,但也有区别。例1:// 定义一个返回参数中较大者的通用函数template <typename T>const T& max(const T& x, const T& y){ return x > y ? x : y...
2018-08-02 18:57:35 1020 1
原创 C++的匿名对象
今天在github看到有人抛出如下异常:throw std::exception("Invalid input."); 即抛出了一个匿名对象。就比较了一下c++标准和各平台的实现:https://blog.csdn.net/a3192048/article/details/81329976顺便也整理下c++的匿名对象。C++中的匿名对象是pure RValue, 因而不能作为引用传进去...
2018-08-01 21:35:05 7771
原创 std::exception标准和各平台实现的不同
C++98标准:C++11标准:g++ 5.4.0实现如下:VS2015实现如下:可见,g++只是实现了标准中的默认构造函数;而VS扩展了标准,新增了explicit exception(char const* const _Message) throw()和exception(char const* const _Message, int) throw();即像t...
2018-08-01 14:25:26 1328
jdk-8u211-windows-x64安装包.rar
2019-07-21
jdk-8u211-Linux-x64安装包.rar
2019-07-21
代码阅读方法与实践.2004.中文版(38.4M清晰版)
2018-10-04
linux学习资料(包含五本书)
2018-07-26
<<21天学通Python>>PDF
2018-07-10
21天学通Python光盘(源代码+PPT+视频)和PDF
2018-07-09
PDFdo PDF Converter3.0免安装破解版
2018-06-13
BackTrack 5 Cookbook中文版 渗透测试实用技巧荟萃
2018-06-13
林肯实验室darpa数据集_2000年(Lincoln Laboratory Scenario (DD0S) 2.0.2)
2018-06-12
如何在cmd下ping端口
2018-06-10
jfreechart表绘制类库及jcommon源代码
2018-06-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人