![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
C/C++
橙子砰砰枪
即使盗版书也看的津津有味
展开
-
C++浅谈内存模型
一个程序的生命程序是一群指令的集合。手写的cpp代码是存储在磁盘上的(固态硬盘等),这时候没有什么内存的概念,只是把写进入的内容存储下来,等点击编译器的编译按钮的时候,编译器的运行程序(比如说g++)将会对这群死代码进行处理,处理的过程为:.cpp 源文件 –预编译处理–> .i 文件 –编译–> .s 汇编文件 –汇编–> .o 文件 –链接–>可运行文件。上述几步,也没有内存的概念。预编译处理读源文件,处理源文件中:宏定义指令:如#define #undef等条原创 2022-04-01 17:28:28 · 144 阅读 · 0 评论 -
C++模板编译与C++编译机制在多文件编译时的冲突
C++模板编译C++模板编译要编译两次。以函数模板为例:第一次编译检查语法第二次编译生成具体的模板函数第一次编译发生在正常的编译期间,第二次编译发生在函数模板调用期间。C++编译机制C++多文件是独立编译,互不干扰的。两种编译方式的冲突main.cpp#include "Person.cpp"int main(){ /* * 这样写会报错,因为c++的编译机制是文件独立编译 * 当都编译完成之后,链接器去找Print函数的定义的时候 * Person.cpp没有将函数模板原创 2021-10-26 17:32:04 · 847 阅读 · 0 评论 -
C++模拟简单客户端服务端通信-Linux
客户端:#include <iostream>#include <string.h>#include <unistd.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>using namespace std;//TCP client classclass C_TCP_Client原创 2021-10-24 22:25:40 · 412 阅读 · 0 评论 -
C++向上取整,向下取整函数
头文件 向上取整 ceil()ceil(1.5)=2ceil(1)=1向下取整 floor()floor(1.5)=1floor(1)=1原创 2021-10-09 22:35:21 · 1595 阅读 · 0 评论 -
C++宽字符串的比较
C++中字符串 string 容器的操作都与 str有关,比如 strchar,strstr…但这都是对于ascll的字符串。如果想操作宽字符串,把str换成wcs就可以,比如wcswcs 宽字符串比较函数wcswcs(L"cde", L"abc");原创 2021-10-04 09:28:18 · 1204 阅读 · 0 评论 -
C-realloc,calloc和malloc的区别
malloc()声明:void* malloc(int size);说明:头文件:stdlib.hsize:要申请的内存空间的大小void* :返回类型,要使用需要强制转换释放:通过free() 释放示例: int *p = NULL; p = (int*)malloc(sizeof (int)*10);//p指向一个整型数组,数组的个数为10 for(int i = 0; i < 10; i++) { p[i] = i; print原创 2021-09-17 16:38:54 · 113 阅读 · 0 评论 -
C++MFC visual studio 2019致命错误:fatal error RC1015:cannot open include file ‘afxres.h‘
第一次用visual studio2019 写mfc程序,因为有对vs2019的一些了解,想着只要下载些插件就ok了,所以就随便博客了一篇,照着装了几个关于mfc的插件,装完之后,新建项目也有mfc应用程序,但就是在建立 基于对话框 的,从 静态库连接dll 的mfc程序,一直报错:字面意思时打不开这个头文件,我本能是去找个头文件,看看有没有,我在安装目录搜索,确实有,顿时不知道咋回事,便又来博客,有说删了这个头文件重新下载的,有说进入项目给添加include路径的,有说这个头文件里面被系统添加了代原创 2021-09-14 19:01:18 · 2480 阅读 · 6 评论 -
C++分析TinyHTTPd源码
有关于TinyHTTPd的源码解析网站已经很多,本文仅记录学习运行环境CentOS 8,QT;代码可以运行但是有bug,但是用于理解阅读还算可以#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <原创 2021-09-12 18:23:41 · 288 阅读 · 0 评论 -
C++空悬指针
空悬指针当delete之后,指针值无效,虽然指针值无效,但在很多机器上指针仍然保存着已经释放了的动态内存的地址,这个指针就变成了 空悬指针 dangling pointer,即 指向一块曾经保存数据对象但现在已经无效的内存的指针。野指针野指针是已经定义,但没有指向实际内存的指针,对野指针解引用等操作是未定义且危险的。未初始化指针(即野指针)的所有缺点空悬指针也有。...原创 2021-07-21 17:42:22 · 539 阅读 · 0 评论 -
C++定位new运算符
普通new运算符://普通的new运算符int *p_int = new int;//默认初始化int *q_int = new int();//默认值初始化两个new空间的例子,一个使用默认初始化,一个使用默认值初始化,值初始化总是有良好定义的值。定位new:new运算符允许向new中传递额外的参数,这种形式成为定位new参数在标准库中定义。bad_alloc 和 nothrow 都定义在 new头文件中//参数不局限于nothrowint *p_int = new(nothrow)原创 2021-07-21 17:28:17 · 642 阅读 · 0 评论 -
C++栈解退(return和throw的区别)
return 为返回,每个函数调用另一个函数,都会将被调函数的指令地址存于主调函数的栈中,函数层层调用,栈也层层叠加,在return时,当前函数返回给上级函数,直至上级函数return才返回给上上级函数,同时return的函数栈释放,以此类推。throw 为抛出异常,其目标不再是上层函数,而是try块,try块在哪,它在哪里停止,在层层调用函数下,底层函数throw,会按顺序释放栈,直至遇到try块。简单一句话:调用return的函数返回上一级,直至在上一级遇到return才会返回上上级,而上一级ret原创 2021-05-09 11:36:47 · 2055 阅读 · 0 评论 -
C++为什么相同的代码在VS里面可以看见析构函数,而在vscode里面看不到析构函数?
c++为什么相同的代码在VS里面可以看见析构函数,而在vscode里面看不到析构函数?左边的编译器是Vs,右边的是vscode ide集成。原因是vscode在main函数中添加了代码 system(“pause”);这句代码是用来防止程序一闪而过的,到了这句代码程序本身其实并没有全部执行完毕,类中的析构函数也就没有被调用,而如果去掉这句代码,析构函数会被执行,但却会一闪而过,解决方放有两个:在命令行里面执行将system(“pause”);这句代码添加到析构函数中答案来源百度作者:spla原创 2020-12-07 20:45:49 · 474 阅读 · 0 评论 -
C++关于VScode写多文件的问题(能成功编译多文件)(小白第一篇文章)
关于VScode写C++多文件的问题(能成功编译多文件)关于很多大佬写的如何配置vscode编写C++的环境,我自己总结了一下,如有不对,还请不吝批评指正下载好MinGW,配置好环境变量(有很多教程),在vscode上安装必要的插件(有很多教程),然后就可以新建.cpp去写,在写的时候选择调试工具,会自动建立那两个文件:tasks.json和launuch.json,里面大多数东西好像都不用改,只需要把launch.json里卖弄的"externalConsole": false, 改成"extern原创 2020-11-28 18:28:13 · 3184 阅读 · 8 评论 -
C++模拟多级反馈队列(MLFQ)
C++模拟多级反馈队列(MLFQ)MLFQ规则:1.多个优先级队列(本模拟实验设置为三个优先级队列)2.处于最高优先级的队列里的进程永远比低优先级队列里的进程先执行3.同队列可采用轮转和先来先服务算法(本模拟实验采用轮转)4.新加入的进程在最高优先级队列5.在CPU运行期时间片到则降低优先级程序说明使用struct模拟进程PCB,实操可运行,可根据需要自选函数模块以实现功能实验功能:/** 输入:进程ID,所需要的CPU资源,所需要的IO资源,先执行CPU or IO* 第一次执行是原创 2021-06-16 15:44:51 · 1188 阅读 · 4 评论 -
C++内联函数(inline)
什么是内联函数内联函数是提高程序运行速度的一种改进。常规函数和内联函数的区别不在于编写方式,而是在于编译器如何将函数代码组合到程序中。函数名其实是地址,程序在执行的过程中,当遇到函数名,就要跳转至函数名指定的地址处执行函数中的代码块,函数执行完毕后再跳转回来,来回跳转必定要有一定的开销。内联函数则对此进行了改进,经过inline声明的内联函数的函数体代码,直接与程序代码内联。因此,当程序执行至内联函数时,不必再来回跳转,这就节省了一定的时间开销。但遗憾的是内联函数要占用更多的内存,如果程序在多个地原创 2021-05-07 19:21:55 · 110 阅读 · 0 评论