
C、C++
涵盖各个方面的问题,深入理解问题本质
jxryj
这个作者很懒,什么都没留下…
展开
-
面试纪要
文章目录迭代器失效size_t 和 ptrdiff_tnative pointer,原生指针顶层const和底层const数组名不能自加操作,指针可以自加操作memmovestrcpy ————仿照memmove()operator++(int)左值和右值大端和小端打开方式三次握手三次握手迭代器失效int arr[]={1,2,3,4,5,6,7,8,9,10};vector<in...原创 2020-03-27 02:17:54 · 351 阅读 · 0 评论 -
一文读懂 .bss段 的作用
网上诸多博主关于.bss段的解释,看了一圈下来,神乎其神,完全脱离实际,只会用“古文”来喝退小白。然而,问题并未解决···因此,想综合自己的理解,用白话文将 .bss段 的作用给大家讲明白文章目录1. 位置2. 作用1)概念2)好处3. 实现1)解释2)举例1. 位置在程序执行前,这块区域的大小就已经固定。值得注意的是,这块区域可以读写。2. 作用1)概念BSS段通常是指用来存放程序中未初始化的或者初始化为0的全局变量和静态变量也就是说,只要初始值为0的类型,都会先放在这里,等到再次赋值原创 2021-03-19 16:53:16 · 9899 阅读 · 3 评论 -
内存泄漏
memory leak:是指由于疏忽或错误造成程序未能释放掉不再使用内存的情况。内存泄漏不是指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。分类:1. Heap leak:malloc, realloc, new等分配后忘记调用 free和delete删掉2. resource leak: 程序使用系统分配的资源后没有使用相应的函数释放掉(比如 bitmap, handle, SOCKET 等),导致系统资源的浪费,严重可导致系统效能降低原创 2021-01-26 16:24:09 · 174 阅读 · 0 评论 -
一文读懂 delete和delete[ ]
文章目录作用内存管理中:第一种情况第二种情况作用delete 释放new分配的单个对象指针指向的内存delete[] 释放new分配的对象数组指针指向的内存内存管理中:1. 不论申请一块多大的内存,头尾都会有对应的大小标注。2. 如果是普通变量类型,直接释放掉(还给操作系统)头尾标记的内存块大小即可。3. 但是如果是类的话,还得看类中的数据类型 a. 如果只有普通类型,可能没有影响 b. 有指针等,像套接字,文件描述符,线程等 i. 最明显的就是端口号不被释放,一直被占用,无法原创 2021-01-26 16:20:56 · 1206 阅读 · 0 评论 -
一文读懂踩内存
1. 概念:访问了不合法的地址 。通俗一点就是访问了不属于自己的地址。如果这块地址分配给了另一个变量使用,就会破坏别人的数据。从而导致程序运行异常,挂死,输出图像破图等。2. 踩内存的可能的情形 1)内存访问越界 a)数组访问越界; b)字符串操作越界; 2)非法指针 a)使用了空指针; b)使用了释放掉的指针; c)指针类型转换错误; 3)栈溢出; 4)多线程读写的数据没有加锁保护 5)多线程使用了线程不安全的函数3. 如何排查 1)删减模块代码,缩小排查范围;原创 2021-01-26 16:13:38 · 1782 阅读 · 0 评论 -
#pragma once和#ifdef限定编译的区别
#ifndef依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方原创 2021-01-26 16:11:17 · 81 阅读 · 0 评论 -
字符串表
字符串的长度往往是不固定的,所以用固定的结构来表示它比较困难。一种很常见的做法是把字符串集中起来存放到一个表,然后使用字符串在表中的偏移来引用字符串偏移对应的字符串如下:这样,引用字符串时,只需要给出一个数字下标即可,不用考虑字符串长度的问题。...原创 2021-01-26 16:09:19 · 760 阅读 · 0 评论 -
define 和const的区别
define 和const的区别:(1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。(2)就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。(3)就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;const定义的只读变量在程序运行过程中只有一份备份。(4)从代码调试的方便程度而言: con原创 2021-01-26 15:52:22 · 255 阅读 · 0 评论 -
STL容器中的有序无序
原创 2021-01-21 12:00:12 · 1110 阅读 · 0 评论 -
static int __ref kernel_init(void *unused)语法分析
震惊!!!1. 缘起“这是我第一次见到这种写法,int 后面还可以接一个宏定义(来自皇兄的灵魂发问)”再看看这个 __ref:再康康:貌似是一个 bool 类型的返回值2. 宏定义作用是个宏定义,还可以传参数!!!看了下官方文档对 __ref 的解释:翻译成中文:这个 modpost 应该是个内核模块3. 真相找了好长时间,也没有得出个所以然来,就去吃饭了。不知怎的突然灵光一闪:(禁止套娃)既然是防止警告的,不就是异常处理吗?既然是异常处理,不就是 try、cat原创 2021-01-21 11:37:34 · 641 阅读 · 6 评论 -
仿照String类,实现简易版MyString类
设计的效果:自用还可以和vector一起用调用方法MySTL::LiteString s;cout << "s\n" << "IsEmpty() " << s.empty() << endl << endl;MySTL::LiteString s2("hello world\0");cout << "s2\n" << s2 << endl;cout << "s2 opera原创 2020-08-05 16:21:01 · 765 阅读 · 0 评论 -
库函数中的排序函数std::sort()
原创 2020-08-01 10:24:42 · 1860 阅读 · 0 评论 -
五种迭代器型别——iterator associated types
原创 2020-08-01 10:23:03 · 413 阅读 · 0 评论 -
容器是否支持迭代器
原创 2020-08-01 10:21:19 · 962 阅读 · 2 评论 -
迭代器失效问题总结
原创 2020-08-01 10:15:19 · 204 阅读 · 0 评论 -
gcc 生成可执行文件的四个步骤
$gcc hello.c$./a.outHello World程序源代码 -> 最终可执行文件分为4个步骤:.c和.cpp区别:分别会用C/C++编译器去编译编译过程中,项目中所有源文件(c或cpp文件)都会参与编译,编译后 链接成 同一个 目标文件,最后变成一个exe可执行文件。头文件就是一个文本文件,存在意义就是被别的源文件 include用每一个源文件严格对应一个obj文件,一一对应链接:合并所有obj文件为一个文件...原创 2020-07-27 15:13:41 · 3843 阅读 · 0 评论 -
native pointer
native pointer原生指针就是普通指针,与它相对的是使用起来行为上x像指针,但却不是指针。说“原生”是指“最简朴最基本的那一种”。因为现在很多东西都抽象化理论化了,所以“以前的那种最简朴最基本的指针”只是一个抽象概念(比如iterator)的表现形式之一。泛型指针泛型指针有多种含义。指void*指针,可以指向任意数据类型,因此具有“泛型”含义。指具有指针特性的泛型数据结构,包含泛型的迭代器、智能指针等。广义的迭代器是一种不透明指针,能够实现遍历访问操作。通常所说的迭代器是指狭义的原创 2020-07-01 20:44:33 · 461 阅读 · 0 评论 -
VScode配置C++完美避坑指南
引言:相比诸多博主神乎其神的博文,让我花费了大半天的功夫,才整理完,而且连最基本的“helloworld”都打印不了,我彻底自闭了次日,突然想起了正版这个事情,于是默默的打开了这个网站,解决了所以问题https://code.visualstudio.com/docs/cpp/config-msvc奉劝诸位一句,不管是什么,一定要吃原来的,最本质的,经过别人手的东西,毕竟会遗失些许精华。...原创 2020-06-24 12:52:02 · 965 阅读 · 1 评论 -
C++程序员精选面试题
文章目录三次握手迭代器失效size_t 和 ptrdiff_tnative pointer,原生指针顶层const和底层const数组名不能自加操作,指针可以自加操作memmovestrcpy ————仿照memmove()operator++(int)左值和右值大端和小端三次握手赤壁之战中,孙刘联军包围了曹操,为歼灭曹贼,孙刘联军必须同时发起进攻形成包围圈。那么问题来了,如果诸葛亮准备于次日卯时借东风,怎么通知孙权进攻时间呢?打电话?不可能,没有这个玩意儿。派传令兵。可是必须进过曹原创 2020-05-12 15:37:47 · 297 阅读 · 0 评论