Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

C++类中虚表的详细讲解

C++类中虚表的详细讲解

C++类中的虚表结构是C++对象模型中一个重要的知识点,这里咱们就来深入分析下虚表的在内存中的结构。 C++一个类中有虚函数的话就会有一个虚表指针,其指向对应的虚表,一般一个类只会有一个虚表,每个虚表有多个”插槽”,每个插槽存放一个虚函数的地址。插槽中的内容可以被覆盖,子类如果重写了父类中的虚函数,则插槽中对应位置的数据被覆盖。虚表存放的是虚函数地址,不管该虚函数是public还是private的。光文字说明不太形象,下面上一张虚...
深入理解C++对象模型

深入理解C++对象模型

C++对象模型是比较重要的一个知识点,学习C++对象的内存模型,就可以明白C++中的多态原理、类的初始化顺序问题、类的大小问题等。1 C++对象模型基础1.1 C++对象中都有哪些东东C++对象中包括以下内容:静态常量成员变量成员函数虚函数纯续函数...以下是一个对象的定义:class Base{static int b_s;public:void function() { }virtual void v_function() {cout <<...
C++空类实例大小不是0原因

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

初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经验,是编译器这方面的一个具体功能。首先:我们要知道什么是类的实例化,所谓类的实例化就是在内存中分配一块地址.那我们先看看一个例子:#include<io...
C语言调试过程中Duplicate Symbol错误分析

C语言调试过程中Duplicate Symbol错误分析

说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境)。如下图: 一.简单分析一下C语言程序的开发步骤。由上图我们可以看出C语言由编写源程序->编译->链接->运行几个步骤进行。编写源程序:C语言的源文件的扩展名为.c,源文件以ASCII的形式存储,不能直接被计算机执行。编译:1.把C语言源程序翻译成计算机可以识别的二进制代码,由编译器完成。2.编译的同时进行语法...
JavaScript事件流原理解析

JavaScript事件流原理解析

一、为什么会有这一篇的文章国庆前几天由于任务比较重,要赶在国庆前把一个进度的任务开发完成,所以也就有点赶,但是却遇到了一个比较奇怪的Bug,导致了任务比预计的延迟了几个小时,对此深表遗憾,所以利用国庆的这段时间来补一补这个不足,也为了国庆后能够更好的完成公司的业务打下基础二、大致了解什么是JavaScript事件流首先这里先来举一个例子<!DOCTYPE html><html lang="en"><head><me...
深入分析 Java 中的中文编码问题

深入分析 Java 中的中文编码问题

编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多。本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别;Java 中经常需要编码的场景;出现中文问题的原因分析;在开发 Java web 程序时可能会存在编码的几个地方,一个 HTTP 请求怎么控制编码格式?如何避免出现中文问题?几种常见的编码格式为什么要编码不知道大家有没有想过一个问...
Java Web中的中文编码

Java Web中的中文编码

Java Web开发中经常会遇到中文编码问题,那么为什么需要编码呢?因为人类需要表示的符号太多,无法用1个字节来表示,而计算机中存储信息最小单元为1个字节。所以必须指定char与byte之间的编码规则了。1 常见的编码方式 计算机中提供了多种编码方式,常见的有ASCII、ISO-8859-1、GBK、GB2312、UTF-16、UTF-8等。ASCII 码学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控...
探索UDP套接字编程

探索UDP套接字编程

UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP、Telnet等,基于UDP有DNS、NFS、SNMP等。UDP是无连接,不可靠的数据协议服务,而TCP提供面向流、提供可靠数据服务。注意,UDP和TCP没有好坏之分,只是二者的适用场景不同罢了。 典型的UDP套接字编程模型是客户端不予服务端建立连接,而只是调用sendto函数来向服务端发送数据,其中必须要指定服务端的信息,包括IP和端口等;服务端不接...
UDP接收端缓冲区和丢包问题

UDP接收端缓冲区和丢包问题

实习项目需要用Winsock内核模式驱动提供的sockets方法,,这个驱动负责连接和缓冲管理,对应用程序提供socket风格的编程接口。大概的流程是发送端将一幅图像分成多个包进行发送,接收端接收包整合成图像并显示。通过测试发现,发送端是相机,采用udp协议,发送的图像数据包有3428个,并且通过wireshark抓取到全部的包,但是接收端只能接收到3000个包左右,出现了丢包现象。分析UDP丢包的原因:1)调用recvfrom方法接收到数据后,处理数据花...
va_start和va_end使用详解

va_start和va_end使用详解

在前一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理:1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(...);void foo(parm_list,...);这种方式和我们以前认识的不大一样,但我们要记住这是C中一种传参的形式,在后面我们就会用到它。2.函数参数的传递原理函...
Libevent初探

Libevent初探

Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。 Libeve...
利用epoll写一个“迷你”的网络事件库

利用epoll写一个“迷你”的网络事件库

epoll是Linux下高性能的IO复用技术,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Trigger...
Libevent的IO复用技术和定时事件原理

Libevent的IO复用技术和定时事件原理

Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。1 Libeve...
<< 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 >>