自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++对象继承中的内存布局

虚函数表对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。首先先通过一个例子来引入虚函数表,假如现在有三个类如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

2020-11-21 21:59:47 2

原创 同一类的不同对象,在调用相同的成员函数时,入口地址是相同的

一般成员函数的第一个参数默认是this(可以不写),this指针指向调用这个函数的对象,所以可以给函数传入不同的参数,输出不同的值,而且互不影响。但是静态成员函数没有this指针。定义的对象,编译器应该是分配了两个内存,内存之间数据是相互不影响的。你可以new出来指针查看变量地址。如果是打印的话,只能重载了或者用多态即同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间,只要不是静态成员函数,互相不会发生关系,也不存在冲突的问题。...

2020-10-22 13:47:02 35

原创 _T

_T是一个宏,作用是让你的程序支持Unicode编码。因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理像中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。他的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理像中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式

2020-09-01 11:25:33 15

原创 线程执行顺序之一

一般情况下,线程在主函数创建,函数分配在栈区,遵循先进后出规则,先创建后运行#include <stdio.h>#include <unistd.h>#include <pthread.h>int var = 8;void *thread_1(void *arg){ while(1) { printf("this is my new thread1: var++\n"); var++; ...

2020-07-27 12:27:48 21

原创 Linux系统调用

系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。系统服务之所以需要通过系统调用来提供给用户空间的根本原因是为了对系统进行“保

2020-07-20 23:38:31 27

原创 Linux的进程/线程间通信方式总结

Linux系统中的进程间通信方式主要以下几种:同一主机上的进程通信方式* UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal)* System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory)网络主机间的进程通信方式* RPC: Remote Procedure Call 远程过程调用* Socket: 当前最流行的网络通信方式, ...

2020-07-10 12:30:55 34

原创 Linux多线程之线程同步(条件变量)

https://www.cnblogs.com/secondtonone1/p/5580203.html

2020-07-10 08:25:05 34

原创 C++11thread之detach()与join()的函数对比

在声明一个std::thread对象之后,都可以使用detach和join函数来启动被调线程,区别在于两者是否阻塞主调线程。(1)当使用join()函数时,主调线程阻塞,等待被调线程终止,然后主调线程回收被调线程资源,并继续运行;(2)当使用detach()函数时,主调线程继续运行,被调线程驻留后台运行,主调线程无法再取得该被调线程的控制权。当主调线程结束时,由运行时库负责清理与被调线程相关的资源。...

2020-07-05 15:44:26 86

原创 Linux环境崩溃生成core文件以及调试

Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是需要更改Linux设置,使程序崩溃时候产生core文件。然后gdb调试即可。1产生core文件方法产生coredump的条件,首先需要确认当前会话的ulimit –c,若为0,则不会产生对应的coredump,需要进行修改和设置。ulimit -cunlimited (可以产生coredump且不受大小限制),这种设置仅对当前生效,如果想永久生效那么需要在/etc/profile中加入以...

2020-06-29 00:17:24 92

原创 博客园学习

博客园https://www.cnblogs.com/DswCnblog/category/847018.html

2020-06-24 14:35:23 52

原创 C++ 11 创建和使用共享 weak_ptr

1、为什么需要weak_ptr?在正式介绍weak_ptr之前,我们先来回忆一下shared_ptr的一些知识。我们知道shared_ptr是采用引用计数的智能指针,多个shared_ptr实例可以指向同一个动态对象,并维护了一个共享的引用计数器。对于引用计数法实现的计数,总是避免不了循环引用(或环形引用)的问题,shared_ptr也不例外。我们先来看看下面这个例子:#include <iostream>#include <memory>#include &l

2020-06-24 14:10:56 27

原创 C++ 11 创建和使用 shared_ptr

shared_ptr的类型是C + +标准库中一个聪明的指针,是为多个拥有者管理内存中对象的生命周期而设计的。在你初始化一个shared_ptr后,你可以复制它,把函数参数的值递给它,并把它分配给其它shared_ptr实例。所有实例指向同一个对象,并共享访问一个“控制块”,即每当一个新的shared_ptr被添加时,递增和递减引用计数,超出范围,则复位。当引用计数到达零时,控制块删除内存资源和自身。下图显示了指向一个内存位置的几个shared_ptr实例。无论什么时候,当内存资源被...

2020-06-24 14:09:20 59

原创 C++11 unique_ptr用法

unique_ptr不共享它的指针。它无法复制到其他unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法。只能移动unique_ptr。这意味着,内存资源所有权将转移到另一unique_ptr,并且原始unique_ptr不再拥有此资源。我们建议你将对象限制为由一个所有者所有,因为多个所有权会使程序逻辑变得复杂。因此,当需要智能指针用于纯 C++ 对象时,可使用unique_ptr,而当构造unique_ptr时,可使用make_uniqueHe...

2020-06-24 11:55:59 92

原创 文件描述符

内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。每一个文件描述符会与一个打开文件相对应,同时,不同的文件描述符也会指向同一个文件。相同的文件可以被不同的进程打开也可以在同一个进程中被多次打开。系统为每一个进程维护了一个文件描述符表,该表的值都是从0开始的,所以在不同的进程中你会看到相同的文件描述符,这种情况下相同文件描述符有可能指向同一个文件,也有可能

2020-06-17 11:54:52 85

原创 简谈C/C++学习路线

问: 为啥我学完了C语言或者C++,却还是啥东西也做不出来?答: 编程语言学完了就能做出东西那也真是天才哇!应该说语言学得就算再精通,它其实也只代表完成了“最小的”那一部分,和实际上手干活之间还是有一个非常大的鸿沟,这个鸿沟就表现为下文即将详述的 编程基础四大件 + 应用实践编程。问: 为什么C/C++写出来的东西都是运行于黑乎乎的命令行?这玩意真有用吗?答: 嘿嘿,...

2020-04-23 21:31:37 58

原创 Ubuntu 16.04 下 Vim配置

注:只对各个用户在自己的当前目录下的.vimrc修改的话,修改内容只对本用户有效,要想全部有效,可以修改/etc/vim/vimrc.在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进等功能的。为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc。启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置...

2020-04-19 18:57:32 42

原创 Ubuntu 16.04 下 Vim安装

默认已经安装了VIM-tinylinuxidc@linuxidc:~$ locate vi | grep 'vi$' |xargs ls -allrwxrwxrwx 1 root root 17 12月 9 21:12 /etc/alternatives/vi -> /usr/bin/vim.tinylrwxrwxrwx 1 root root 20 12月 9 21:...

2020-04-19 18:54:52 68

原创 多线程底层执行原理

说道底层运行,那么是不是就是需要依靠CPU啊;那,各位之前有没有听过一句话叫做,一个CPU在同一个时间片只能执行一个程序;什么意思呢?就是,你的程序是不是都运行在一个CPU上啊,那你真正一个CPU在同一个时间片里是不是只能执行一个程序呀,那这个程序究竟要执行那个程序,是不是就需要通过线程之间时间片的一个争抢;时间片:微小的时间段;多线程说白了就是时间片的争夺,那个线程获取了时间...

2020-04-12 19:39:54 153

原创 C++ 计数排序

计数排序的原理:(1)首先,找出最大的元素,给“count[ ]”申请“最大元素的下标+1”个单元(因为数组下标是从0开始的,所以要+1);(2)然后,统计每个元素出现的次数,把次数存到“count[ ]”里;(3)最后,通过一个元素出现的次数-1,从而算出正确顺序的位置,再把元素放进去,就有顺序了。 因为不知道范围的大小,所以需要申请内存,如果知道范围的大小,就可以直接声明。...

2019-09-02 23:15:18 188

原创 求int在二进制存储时1的个数(C++)

输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。输入:5输出:2代码如下:#include<iostream>#include<string>#include<cstring>using namespace std;int main() { int input; int output=0; cin >> inp...

2019-06-29 20:29:27 74

原创 判断字符串中的括号是否匹配——c和c++实现

判断字符串中的括号是否匹配递归实现:先检搜一对匹配的括号,再对里面的内容进行匹配,匹配完后再继续往下匹配……代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>// 在start与end中搜索匹配int fun(char *str, int start, int ...

2019-04-14 12:52:30 1406

原创 每个技术人都有一个技术 “梦“

  最近一直都在接受入职培训,各种团队建设,人际沟通,各种感觉没意思,我就想着手项目,直接上手,因为我有一个技术梦,虽然这个梦很笼统,很抽象,但是最美的期待总是在你没有任何意识的时候发生,坚持、积累、勤奋,这就是学习的真谛。1.01和0.99,到底相差多少。表面看起来只是相差了0.02,实在是微乎其微,不足道哉。但是当与365乘方后,结果却是天差地别...「1.01^365=37.78...

2018-07-17 21:01:17 168

原创 虚函数表

           对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由...

2018-07-17 20:51:45 72

转载 技术人的自我学习

在如今的工作和生活中,“天下武功,唯快不破”成了我们的追求目标。我们都希望在短期内速成,什么“21天成就xxx”、“xxx技能100天速成”广受欢迎,我们甚至期望一夜之间变得学富五车、才高八斗、一夜暴富。我们都知道这是不符合常理的,但是有没有什么比较好的方法让我们能够相对比别人更快地掌握知识、更快地取得成就呢?《好好学习——个人知识管理精进指南》为我们提出了一套学习方法论,希望能够帮助到大家,在学...

2018-06-24 19:20:00 436

原创 exit() 与_exit的区别

_exit()函数:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit()函 数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。exit()函数与_exit()函数最大的区别就在于 exit()函数在调用 exit 系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件。#include&lt;unistd.h&gt;  main()  {  pr...

2018-06-16 11:47:10 120

原创 求最大值及其下标

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。输入格式:输入在第一行中给出一个正整数n(1&lt;n≤10)。第二行输入n个整数,用空格分开。输出格式:在一行中输出最大值及最大值的最小下标,中间用一个空格分开。输入样例:62 8 10 1 9 10输出样例:10 2代码实例如下:#include&lt;stdio.h&gt;int main(){ int n,...

2018-06-04 12:02:01 1939

原创 STL常用容器大致对比

1.vector    vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。vector有多个构造函数,默认的构造函数是构造一个初始长度为0的内存空间,且分配的内存空间是以2的倍数动态增长的,在push_back的过程中,若发现分配的内存空间不足,则重新分配一段连续的内存空间,其大小是现在连续空间的2倍,再将原先空...

2018-05-28 12:04:22 226

原创 判断手机号码是否符合要求

我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:1、 长度13位;2、 以86的国家码打头;3、 手机号码的每一位都是数字。请实现手机号码合法性判断的函数要求:1) 如果手机号码合法,返回0;2) 如果手机号码长度不合法,返回13) 如果手机号码中包含非数字的字符,返回2;4) 如果手机号码不是以86打头的,返回3;要求实现函数:int s int...

2018-04-03 22:35:48 1124

原创 C编译错误,运行错误以及常见问题。

  春招过程中发现的问题,和大家分享一下:(1) 编译错误:就是编译器无法进行继续编译的错误,最基本的就是语法错误了,比如语句后面少了;或者 } 不匹配之类的,选择题一般是这样。编译错误可以由编译器检查出来。(2) 运行时错误:分为两类:1. 由于考虑不周或者输入错误导致程序异常,比如数组越界访问,除数为0,堆栈溢出等。 2,由于程序设计思路的错误导致程序异常或难以得到预期结果。编译器对运行时错误...

2018-03-06 20:17:51 15406

原创 位运算与逻辑运算

小白开始学习编程,计算机基础知识很是薄弱,于是打开百度,恶补好多,下面我们讲讲位运算与逻辑运算的区别。       首先从概念上区分下,位运算是将运算符两边的数字换算成二进制(例:0000010001)后比较相同位置上的0、1进行运算的。逻辑运算即比较运算符两边的逻辑值(true或false)。概念比较抽象,下边借助实际例子比较下。       位运算先将每个数转换成二

2018-01-04 19:14:11 1389 1

转载 C语言的那些秘密之---函数返回局部变量

一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意

2018-01-02 22:40:50 215

转载 tcp三次握手四次挥手(及原因)详解

TCP(Transmission Control Protocol,传输控制协议)是 面向连接的协议,也就是说在收发数据之前,必须先和对方建立连接,一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的 描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步 (同步就是两台主机

2017-12-08 14:36:14 89

C++多线程编程视频教程(C++11多线程并发)【122212】多线程API详解(一).rar

《C++面向对象多线程编程》推荐:毫无疑问,这是我见过的最好的、最全面的多线程方面的图书。如果你把自己看作一位程序员,而不是组件装配员,那你就需要了解多线程方面的知识。只要不是刚刚入门的C++程序员都可以从《C++面向对象多线程编程》受益良多;不仅多线程编程的核心内容值得研习,书中的优秀源代码也可供借鉴。

2020-03-13

空空如也

空空如也

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

TA关注的人 TA的粉丝

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