首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
C++好难啊
获赞
63
粉丝
41
关注
0
看过 TA
186
男
西安理工大学
2022
C++
IP属地:北京
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑C++好难啊吗?
发布(140)
评论
刷题
收藏
C++好难啊
关注TA,不错过内容更新
关注
2021-02-02 13:51
西安理工大学 C++
静态链接——C++相关问题
目录 C++相关问题 重复代码消除 全局构造和析构 C++与ABI 静态库 参考文献 C++相关问题 C++的一些语言特性是必须由编译器和链接器共同支持才能完成。主要就是两方面,一个是C++是的重复代码消除,一个是全局的构造和析构。 重复代码消除 C++在很多时候会产生重复的代码,比如模板、虚函数表等都可能在不同的编译单元生成相同代码。这样就会造成以下问题: 空间浪费:如果几百个编译单元同时实例了同一个模板,那么在最后链接的时候必然会消除相同的模板函数,否则程序就会像个200斤胖子。 地址较容易出错:可能两个指向同一函数的指针会不相同 指令运行效率低:如果同一份指令有多个副本,那么...
0
点赞
评论
收藏
分享
2021-02-02 13:51
已编辑
西安理工大学 C++
进程的装载
目录 进程的装载 装载方式 覆盖装载 页映射 从操作系统角度看进程的装载 进程的创建 页错误 linux下ELF文件装载 参考文献 进程的装载 程序执行时所需要的指令和数据必须在内存中才能够正常运行,最简单的方法就是将所需要的指令和数据全部装入内存,这就最简单的静态装载。 熟悉计算机原理的同学可能知道,程序运行是有时间以及空间局部性的,,所以我们一般将程序最常用的部分驻留内存,将一些不太常用的放在磁盘上。这就是动态装载的基本原理。 动态装载的思想就是用哪个就把哪个装载入内存,覆盖装入和页映射就是两种很典型的动态装载方法。 装载方式 覆盖装载 覆盖装载虽然已...
0
点赞
评论
收藏
分享
2021-02-02 13:50
西安理工大学 C++
进程虚拟空间
进程虚拟空间 进程 进程是我们经常提到的一个概念,那么它究竟是什么?它和程序又有什么区别呢? 程序是一个静态的概念,它是一些预先编译好的指令和数据集合的文件。 进程则是一个动态的概念,它是程序运行时的一个过程。 如果程序是剑谱的话,进程就是你舞剑的过程,函数是你的一个剑招。 进程虚拟空间 每个程序运行起来之后,都会有自己独立的虚拟地址空间。这个虚拟地址空间的带下由计算机平台决定,硬件决定了地址空间的最大理论上限,即硬件的寻址大小空间。 比如说在32位平台下,地址空间最大可达到2^32bit = 4G,而这也是我们常说的1G内核空间+3G用户空间的概念来源。 在C语言中,如果平台是32位地址空...
0
点赞
评论
收藏
分享
2021-02-02 13:50
已编辑
西安理工大学 C++
进程虚拟空间分布
目录 进程虚拟空间分布 ELF文件链接视图和执行视图 堆和栈 段地址对齐 参考文献 进程虚拟空间分布 ELF文件链接视图和执行视图 当我们站在操作系统装载可执行文件的角度看问题时,可以发现它实际并不关系可执行文件的实际内容,操作系统只关心一些跟装载有关的问题,主要是段的权限。ELF文件中,段只有几种组合,基本是以下三种: 以代码段为代表的权限为可读可执行的段。 以数据段和BSS段为代表的权限为可读可写的段 以只读数据段为代表的权限为只读的段 我们知道,因为页对齐的原因,当段的数量增多是,不可避免的就会产生空间浪费的问题。因此,对于相同权限的段,我们把他们合并到一起当作...
0
点赞
评论
收藏
分享
2021-02-02 13:50
西安理工大学 C++
动态链接
目录 动态链接 地址无关代码 装载时重定位 地址无关代码 一、模块内部函数调用 二、模块内部数据访问 三、模块间数据访问 四、模块间调用、跳转 共享模块的全局变量问题 延迟绑定 参考文献 动态链接 动态链接的基本思想是把程序按照模块拆分成各个相对独立部分,在程序运行时才将它们链接在一起形成完整的程序,而不是像静态链接一样把所有程序模块都链接成一个单独的可执行文件。 静态链接时,整个程序最终只有一个可执行文件,它是一个不可分割的整体; 在动态链接下,一个程序被分成了若干个文件。 那么在共享对象被装载时,如何确定他在进程虚拟地址空间中的位置呢? 地址无关代码 在早期有一...
0
点赞
评论
收藏
分享
2021-02-02 13:49
已编辑
西安理工大学 C++
深入动态链接
目录 深入动态链接 动态链接相关结构 “.interp段” “.dynamic段” 动态符号表 动态链接重定位表 动态链接时进程堆栈初始化信息 动态链接的步骤 动态链接器自举 装载共享对象 重定位和初始化 参考文献 深入动态链接 上一篇博客:动态链接简单介绍了动态链接的原理,这篇博客将要介绍动态链接的具体实现。 动态链接相关结构 动态链接情况下,可执行文件的装载和静态链接基本一样。首先操作系统会读取可执行文件的头部,检查文件的合法性,然后从头部中的“program header”中读取每个“segment”的虚拟地址、文件地址和属性,并且将他们映射到进程虚拟空间的相应位...
0
点赞
评论
收藏
分享
2021-02-02 13:49
已编辑
西安理工大学 C++
物理层——一篇blog完全了解物理层
目录 物理层 物理层概念 数据通信基础知识 数据通信系统模型 有关信道的几个概念 信道的极限容量 物理层下的传输媒体 导引型传输媒体 双绞线 同轴电缆 光缆 非导引型传输媒体 短波通信 微波通信 卫星通信 信道复用技术 频分 && 时分 && 统计分时 波分复用 码分复用 参考文献 物理层 物理层概念 物理层是计算机网络OSI模型中最低的一层,物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的、电子的、功能的和规范的特性,简单说就是物理层确保原始数据可在各种物理媒体上传输。 机械特性:指明接口所用接...
0
点赞
评论
收藏
分享
2021-02-02 13:48
已编辑
西安理工大学 C++
面向对象与C++——第一课
目录 第一课 程序设计方法 结构化程序设计 面向对象程序设计 C++ C++语言特点 支持数据封装和数据隐藏 支持继承和重用 支持多态性 参考文献 第一课 程序设计方法 结构化程序设计 传统的程序设计方法可以归纳成:程序 = 算法+数据结构,这种方法的着眼点是面向过程,特点是数据与程序分离。 但是结构化程序难以适应大型软件,程序的可重用性差。 面向对象程序设计 面向对象的方法着眼于将数据和对数据的操作方法放在一起,形成一个独立的整体——对象,同类的还可以因为共性而聚合成类。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法就叫做接口。对象之间通过消息进行...
0
点赞
评论
收藏
分享
2021-02-02 13:48
已编辑
西安理工大学 C++
我的第一个C++程序——第二课
目录 计算机基础知识 程序的创建过程 程序的执行过程 我的第一个C++程序 main函数 C++注释 头文件 名称空间 cout && endl C++数据类型 数据类型 参考文献 计算机基础知识 这里只是简单的介绍一下,后面会深讲。 程序的创建过程 程序的创建将从源代码开始,经过预编译–>编译–>汇编–>链接四个过程组件。 预编译:将头文件展开,宏定义展开等工作 编译:进行语法分析、语义分析、源代码级别优化等工作 汇编:对照翻译表,将源代码翻译成01二进制目标文件 链接:将多个目标文件聚合起来形成一个程序 程序的执行过程 程序...
0
点赞
评论
收藏
分享
2021-02-02 13:48
已编辑
西安理工大学 C++
IO 阻塞与非阻塞 同步与异步
目录 网络IO模型 阻塞和非阻塞 同步与异步 参考文献 网络IO模型 IO是个我们很熟悉的操作,在操作系统的角度来讲,IO一般就是对磁盘文件的访问。但是站在网络的角度上说: 网络IO的本质是对socket的读取。 网络IO一般分为两阶段:数据准备和数据读写。 数据准备:根据系统IO操作的就绪状态分为阻塞和非阻塞 数据读写:根据应用程序和内核的交换方式分为同步和异步 陈硕大神:在处理IO的时候,阻塞与非阻塞都是同步IO。只有使用了特殊API才是异步IO 阻塞和非阻塞 下面看一段代码,我根据代码来解释阻塞和非阻塞: int main() { ... char buff[128]...
0
点赞
评论
收藏
分享
2021-02-02 13:47
西安理工大学 C++
C++高级——探秘对象构造和析构(一)
目录 探秘对象构造和析构(一) 构造顺序 参考文献 探秘对象构造和析构(一) 首先我们先看我们的类代码: class Test { public: //带一个整型参数的构造函数 Test(int a = 10) :ma(a) { cout << "Test(int)" << endl; } //析构函数 ~Test() { cout << "~Test()" << endl; } //拷贝构造函数 Test(const Test &t) :ma(t.ma) { cout <...
0
点赞
评论
收藏
分享
2021-02-02 13:47
已编辑
西安理工大学 C++
C++高级——探秘对象构造和析构(二)
目录 对象作为参数或者返回值的处理 存在堆空间的对象作为返回值的情况 参考文献 对象作为参数或者返回值的处理 首先来看类的定义: class Test { public: // Test() Test(20) Test(int data = 10) :ma(data) { cout << "Test(int)" << endl; } ~Test() { cout << "~Test()" << endl; } Test(const Test &t):ma(t.ma) { cout...
0
点赞
评论
收藏
分享
2021-02-02 13:47
西安理工大学 C++
C++高级——从vector的push_back看move、forward与右值引用
目录 move、forward与右值引用 move && forward 参考文献 move、forward与右值引用 首先看主函数代码: int main() { CMyString str1 = "aaa"; vector<CMyString> vec; //预留10个空间 vec.reserve(10); cout << "-----------------------" << endl; vec.push_back(str1); vec.push_back(CMyString(&q...
0
点赞
评论
收藏
分享
2021-02-02 13:46
西安理工大学 C++
C++高级——不带引用计数的智能指针(unique_ptr,auto_ptr,scoped_ptr)
目录 智能指针 浅拷贝问题 auto_ptr scoped_ptr unique_ptr 参考文献 智能指针 相信大家都忘写过delete或者free? 如果你没有 诚然,指针的C系语言的优势,但它所带来的的内存泄露问题也是劣势,可谓成也萧何败萧何。 所以,C++引入智能指针,利用类对象出作用域析构的特点,将普通指针封装称为智能指针以达到解决内存泄漏的问题。 下面是一个智能指针的简单例子: template<typename T> class Csmartptr { public: Csmartptr(T* ptr = nullptr) :mptr(ptr) { }...
0
点赞
评论
收藏
分享
2021-02-02 13:46
已编辑
西安理工大学 C++
C++高级——带引用计数的智能指针(shared_ptr,weak_ptr)
目录 带引用计数的智能指针 shared_ptr与weak_ptr 参考文献 带引用计数的智能指针 什么是带引用计数的智能指针,有什么用的? 带引用计数的智能指针可以实现多个智能指针管理同一个资源。 通过给每个被管理的资源匹配一个引用计数来实现。当新增一个智能指针指向该资源时,引用计数+1,当减少一个智能指向该资源是,引用计数-1,知道引用计数为0时,资源被释放掉。 下面我们就来看一个简单的智能指针的代码: 首先是对资源引用计数的类。 template<typename T> class RefCnt { public: RefCnt(T *ptr = nullpt...
0
点赞
评论
收藏
分享
1
2
3
4
5
6
10
创作者周榜
更多
关注他的用户也关注了:
牛客网
牛客企业服务