自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (5)
  • 收藏
  • 关注

原创 C++构造函数、析构函数与抛出异常

1,【问题】 构造函数可以抛出异常么?析构函数可以吗?2,【分析】 从语法上来说,构造函数和析构函数都可以抛出异常。但从逻辑上和风险控制上,构造函数可以,析构函数不推荐抛出异常。(1)构造函数可以抛出异常无论何时,从构造函数中抛出异常都是可以的。动态创建对象要进行两个操作:分配内存和调用构造函数。若在分配内存时出错,会抛出bad_alloc异常;若在调用构造函数初始化时出错,会不会存在内存泄漏呢?答案是不会。new运算符保证不会出现内存泄漏:T *p = new T...

2020-08-20 21:53:56 499

原创 Explicit Constructors(显式构造函数)

按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p );//用C风格的字符串p作为初始化值//…}String s1 = “hello”;//OK 隐式转换,等价于String s1 = String(“hello”);但是有的时候可能会不需要这种隐式转换,如下:class String { String ( int...

2020-08-20 18:00:57 218

原创 c++之this指针

1. this指针的用处:  一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。  例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),t.

2020-07-25 11:43:29 151

原创 __cplusplus 和extern “C”

由于C++编译器需要支持函数的重载,会改变函数的名称,因此dll的导出函数通常是标准C定义的。这就使得C和C++的互相调用变得很常见。但是有时可能又会直接用C来调用,不想重新写代码,让标准C编写的dll函数定义在C和C++编译器下都能编译通过,通常会使用以下的格式:(这个格式在很多成熟的代码中很常见)#if defined(__cplusplus)extern "C" {#endif// 在这里写标准C程序,例如dll导出函数的定义#ifdef __cplusplus}#endi...

2020-07-03 10:56:11 278

原创 头文件unistd.h中的unistd是什么的缩写?

unixstandardheader -> unistd.hstandardinputoutputheader -> stdio.hstandardlibraryheader -> stdlib.h

2020-06-19 17:00:54 1180

原创 哪些函数可以成为虚函数,哪些函数不可以成为虚函数

一,什么是虚函数拥有 Virtual 关键字的函数称之为虚函数虚函数的作用是实现动态绑定的,也就是说程序在运行的时候动态的的选择合适的成员函数那么,有哪些函数可以成为虚函数?那些函数不可以成为虚函数?要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果

2020-06-14 21:39:04 8657 1

原创 c++之哪些成员函数不能被继承

C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。一,构造函数  构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。  如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。 ..

2020-06-14 21:25:50 6620

原创 HTTP 401和403的区别

一句话:401 未认证响应-------是由于用户没有进行身份认证或者身份认证不对。403 拒绝响应----------是当用户通过了身份验证,但无权对给定资源执行请求的操作(比如没有读写权限)。引用书上的话来说明:There's a problem with 401 Unauthorized, the HTTP status code for authentication errors. And that’s just it: it’s for authentication, not.

2020-05-23 11:30:00 1702 1

原创 __attribute__中constructor和destructor

1,__attribute__介绍__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数  __attribute__语法格式为:__attrib...

2020-05-05 21:47:42 121

原创 什么情况下析构函数需要定义为虚函数?

一,为什么基类的析构函数是虚函数呢? 在实现多态时,当一个类被作为基类并且该基类对派生类的对象进行操作,在析构时防止只析构基类而不析构派生类的状况发生。把基类的析构函数设计为虚函数可以在基类的指针指向派生类对象时,用基类的指针删除派生类对象,避免内存泄漏。二,通过几个例子来看一下效果1,例子1:#include<iostream>using name...

2020-05-05 18:17:03 690

原创 析构函数

1,什么是析构函数 创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存、关闭打开的文件等,这个函数就是析构函数。 析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前...

2020-05-05 18:06:56 337 1

原创 从汇编角度看引用

引用类型到底是什么?它和指针有什么关系?它本身占用内存空间吗? 带着这些疑问,我们来进行分析。 先看代码:#include <stdio.h>#include <iostream>using namespace std;void main(){ int x = 1; int &b = x;}通过汇编查看代码如下:9...

2020-05-04 17:13:39 334

原创 vfork创建的子进程与父进程地址空间关系

存储unix编程在《UNIX环境高级编程》一书的第八章中,有一道课后习题如下:回忆图7-3典型的存储空间布局。由于对应于每个函数调用的栈帧通常存储在栈中,并在调用vfork后,子进程运行在父进程的地址空间中,如果不是在main函数中而是在另一个函数中调用vfork,以后子进程从该函数返回时,将会发生什么情况?作者Rich Stevens是一位大师,留下这么一题必有其深意,于是结合《深...

2020-05-04 10:33:45 900

原创 ps 命令查看进程下的线程及线程状态

查看java所有线程ps –eLf | grep java查看进程下的所有线程cpu利用率top -H -p 25120其中25120为Java进程号。下图红色标注的地方为线程状态。其中总数为28,当前运行的线程为0,28个线程睡眠,没有终止的线程或僵尸线程。https://blog.csdn.net/xiangguiwang/article/details/7946...

2020-05-03 22:35:01 1012

原创 进程上下文切换与和线程上下文切换的区别

1.首先,需要搞明白什么是上下文切换?上下文切换就是从当前执行任务切换到另一个任务执行的过程。但是,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。2. 然后,需要明白进程与线程的区别?(网上很多,这里简单说明)1).线程是进程的一部分。进程是表示资源分配的基本单位,又是调度运行的基本单位,是程序执行的一个实例; 线程是进程中执行运算的最小单位,即执行处理机调度的...

2020-05-03 21:28:00 2181

原创 进程或线程持有锁期间终止了,怎么办?

1,进程终止: 进程终止时系统不会自动释放所持有的互斥锁、读写锁和Posix信号量,进程终止时内核总是自动清理的唯一同步锁类型是fcntl记录锁。System V信号量,应用程序可以选择进程终止时内核是否自动清理某个信号量。2,线程终止: 1),一个线程也可以在持有某个互斥锁期间终止,自己调用pthread_exit或被另一个线程取消。如果线程调用pthread...

2020-03-30 22:46:16 1390

原创 二维数组如何申请和释放

1,二维数组的申请typedef struct dictht { dictEntry **table; unsigned long size; unsigned long sizemask; unsigned long used;} dictht;typedef struct dictEntry { void *key; union {...

2020-03-04 22:34:05 1949

原创 程序结束后,malloc申请的内存会被释放掉吗

1,有这么一个问题,下面这段程序执行完毕后,malloc的内存会释放吗?int main () { int *p = malloc(10 * sizeof *p); *p = 42; return 0; //Exiting without freeing the allocated memory} 这段程序运行完后,p 申请的malloc地址会被释放掉吗? 会的。T...

2020-02-24 21:45:57 8315 1

原创 linux 文件描述符与文件指针 详解

简单归纳:fd只是一个整数,在open时产生。起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针file。1,文件描述符 文件描述符的操作(如: open)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用;而流(如: fopen)返回的是一个FILE结构指针, FILE结构是包含有文件...

2020-02-23 23:06:28 320

原创 udp客户端使用bind的场景

无连接的socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。使用bind函数时,通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。 Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是,在调用bind函数时一般不要将端口号置为小于1024的值,因为1到1024是...

2019-11-04 22:46:46 1907

原创 TCP 和 UDP 套接字缓冲区

1、MTU(Maximum Transmission Unit)最大传输单元,在数据链路层中,往往规定了MTU大小,IP层的数据包通过数据链路层如果大于MTU,将被分片,到达接收端IP层后再被重组。以太网的MTU为1500字节。2、MSS(Maximum Segment Size)最大报文段,是TCP协议的一个选项。MSS选项用于在TCP建立连接时,收发双方协商一个TCP报文段所能承载...

2019-11-02 22:22:34 720

原创 进程间通讯IPC的几种方式的优缺点总结

Linux进程间的通讯Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。Linux则把两者继承了下来,如图示...

2019-09-21 09:40:46 1380

原创 socket的sigpipe信号

对一个对端已经关闭的socket调用两次write,第一次将会收到队端的RST响应,第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP的"四次握手"关闭. TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协议的语义, 表示对端只是关闭...

2019-09-08 23:00:36 243

原创 SO_ERROR 套接字选项

当一个套接字上发生错误时,内核协议中的协议模块将此套接字的名为so_error的变量设为标准的Unix Exxx值中的一个,我们称它为该套接字的待处理错误(pending error)。内核能够以下面两种方式之一立即通知进程这个错误。如果进程阻塞在对该套接字的select调用上,那么无论是检查可读条件还是可写条件,select均返回并设置其中一个或所有两个条件。 如果进程使用信号驱动式I...

2019-09-08 16:17:12 2387

原创 socket可读和可写的条件

一、下列四个条件中的任何一个满足时,socket准备好读:1,socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操作不会阻塞,并返回一个大于0的值(即:准备好读入的数据的字节数).我们可以用socket选项SO_RCVLOWAT来设置此低潮限度,对于TCP和UDPsocket,其缺省值为1;2,连接的读这一半关闭...

2019-09-08 11:29:26 875

原创 三次握手的第三个ACK包丢了,会发生什么?

众所周知,TCP建立采用的是三次握手。最近在看论文的时候,突然想到,如果第三个ACK报文丢失了,TCP建立是否还会成功?TCP是如何处理的呢?三次握手的第三个ACK包丢了——客户端认为连接建立,写数据时,会触发RST 。当Client端收到Server的SYN+ACK应答后,其状态变为ESTABLISHED,并发送ACK包给Server;如果此时ACK在网...

2019-08-18 21:59:47 1638 1

原创 wireshark中“tcp segment of a reassembled pdu”的解释

“TCP segment of a reassembled PDU”指TCP层收到上层大块报文后分解成段后发出去。于是有个疑问,TCP层完全可以把大段报文丢给IP层,让IP层完成分段,为什么要在TCP层分呢? 其实这个是由TCP的MSS(Maximum Segment Size,最大报文段长度)决定的,TCP在发起连接的第一个报文的TCP头里通过MSS这个可选项告知对方本端能够接收的最大报文(当然...

2019-08-11 23:09:26 3525 1

原创 网络编程 accept

1,accept 从listen 监听队列中接受一个连接。#include <sys/types.h>#include <sys/socket.h>int accept(int socked, struct socked *addr, sickle_t *addrlen); sockfd参数是执行过listen 系统调用的监听s...

2019-08-04 18:54:40 933

原创 二分查找

一,二分查找二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找。时间复杂度:O(lon2(n))二,最基本的二分查找 int binarySearch(int* A, int target, int n){ int low = 0, high = n, mid; while(lo...

2019-07-23 23:01:56 131

原创 283. 移动零

一,移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。二,方法:双指针与移除元素相似,遍历数组,将不是0的元素重新赋值到数组中,遍历完后就剩余的数组空间赋0即可。三,实现...

2019-07-21 23:07:28 71

原创 27. 移除元素

一,移除元素给定一个数组 nums和一个值 val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 n...

2019-07-21 22:55:57 63

原创 80. 删除排序数组中的重复项 II

一,删除排序数组中的重复项 II给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3...

2019-07-21 22:42:08 115

原创 26. 删除排序数组中的重复项

一,删除排序数组中的重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长...

2019-07-21 21:58:12 87

原创 linux内核源码下载地址

从linux0.0.1到现在,可下载不同时期的linux 内核版本:http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

2019-05-12 11:12:44 5272

原创 linux fork

1,fork函数#include <unistd.h>pid_t fork(void); 返回值:子进程返回0,父进程中返回子进程id,出错返回-1 由fork创建的新进程被称为子进程。fork函数被调用一次,但返回两次。两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程id。 为什么...

2019-05-04 17:02:25 237

原创 ENOENT

Why does ENOENT mean “No such file or directory”?It's an abbreviation(缩写)of Error NO ENTry (or Error NO ENTity), and can actually be used for more than files/directories.It's simply “No such d...

2019-05-02 16:25:25 1321

原创 isystem v ipc 之键,标识符和ftok详解

1,system v ipc的三种方式system v 消息队列 system v 信号量 system v 共享内存 消息队列 信号量 共享内存 头文件 <sys/msg.h> <sys/sem.h> <sys/shm.h> 创建或打开ipc的函数 msgget semget shmge...

2019-05-01 21:19:19 400

原创 unix/Linux BSD以及System V---认知

一,BSD 和System V Unix操作系统在操作风格上主要分为System V和BSD(目前一般采用BSD的第4个版本SVR4),前者的代表的操作系统有Solaris操作系统,在Solaris1.X之前,Solaris采用的是BSD风格,2.x之后才投奔System V阵营。后者的代表的操作系统有FreeBSD。  System V它最初由AT&T开发,曾经也被...

2019-05-01 14:59:51 493

原创 redis 不同版本下载地址

redis 下载网址:http://download.redis.io/releases/

2019-04-28 09:24:23 484

原创 网络编程 read 阻塞和非阻塞下的区别

1,read 原型,参数以及返回值。#include <uinstd.h>ssize_t read(int fd, void *buf, size_t nbytes);-----read,只是将内核中缓冲区的数据搬到用户进程空间。参数:fd:某个连接的套接字。buf:从内核缓冲区读入的数据放到用户缓冲区的地址。nbytes:希望读入的数据大小,一般不是真正...

2019-04-20 23:21:06 1888

xinetd-master.zip

Xinetd:即extended internet daemon,是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。

2019-12-01

libevent-release-1.4.15-stable.tar

lib event 1.4.15是学习libevent的一个好版本!

2019-11-07

apache-tomcat-7.0.91.tar

apache-tomcat-7.0.91版本!

2019-11-07

redis-beta-1.tar

redis的最初的beta版,代码读起来较简单,易于初学者学习。

2019-11-07

Android Wi Fi Display Miracast 介绍

android下wifi-display的miracast的详细文档介绍,里面还附有部分代码。

2014-09-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除