![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c++/go后台技术栈
c++/go后台技术栈
森总工作室
森总工作室,致力于前沿技术研究。工作室主要成员来自腾讯、阿里巴巴等国内顶级科技公司。
展开
-
从指令角度掌握函数调用堆栈详细过程
C++服务器开发原创 2023-04-05 14:49:12 · 185 阅读 · 0 评论 -
进程虚拟地址空间区域划分
进程虚拟地址空间区域划分原创 2023-04-04 22:40:07 · 203 阅读 · 0 评论 -
编译警告"struct declared inside parameter list"
近来在阅读linux-2.6.37中cgroup的相关代码,读到include/linux/cgroup.h的开头时犯了嘀咕:#include <linux/sched.h>#include <linux/cpumask.h>#include <linux/nodemask.h>#include <linux/rcupdate.h>...转载 2020-03-11 08:03:10 · 2855 阅读 · 0 评论 -
typename
1、类型说明typedef类型说明的格式为:typedef 类型 定义名;类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型。定义名表示这个类型的新名字。例如: 用下面语句定义整型数的新名字:typedef int SIGNED_INT;使用说明后, SIGNED_INT就成为int的同义词了, 此时可以用SIGNED_INT 定义整型变量。例如: SI转载 2017-07-05 15:19:30 · 275 阅读 · 0 评论 -
unique_ptr
我们知道auto_ptr通过复制构造或者通过=赋值后,原来的auto_ptr对象就报废了.所有权转移到新的对象中去了.而通过shared_ptr可以让多个智能指针对象同时拥有某一块内存的访问权.但假如我们不希望多个内存块被多个智能指针对象共享,同时又不会像auto_ptr那样不知不觉的就让原来的auto_ptr对象失效,可咋整呢?这个时候就要使用unique_ptr了,顾名思义嘛,unique转载 2017-07-04 20:19:51 · 281 阅读 · 0 评论 -
share_ptr
前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针,顾名思义,有个shared表明共享嘛.所以shared_ptr类型的智能指针可以做为STL容器的元素 下面我们来瞧瞧shared_ptr具体是咋实现的.相较auto_ptr有下面几个不同转载 2017-07-04 20:06:38 · 582 阅读 · 0 评论 -
auto_ptr
智能指针实际上是一个类(class),里面封装了一个指针.它的用处是啥呢?指针与内存说到指针自然涉及到内存.我们如果是在堆栈(stack)中分配了内存,用完后由系统去负责释放.如果是自定义类型,就会自动的去调用你的析构函数.但如果是在堆(heap)中分配了内存,也就是用malloc或者new.那只能自动手动的使用free或delete去释放.所以使用heap时处理的不好很容易出现啥内存转载 2017-07-04 19:41:42 · 243 阅读 · 0 评论 -
c++开发的linux基础
以下复习资料仅供参考,并非面试真题。用过的 Linux 指令 netstat : 显示网络状态 (-a 所有选项,-t 仅显示 tcp,-u 仅显示 udp,-r 路由表) tcpdump : 截获当前所有通过本机网卡的数据包。 -i 指定网卡 tcpdump tcp port 23 and host XXX 获取从主机 XXX 接收或发出的 telnet 包 top:转载 2017-06-28 11:27:22 · 338 阅读 · 0 评论 -
c++中指向函数的指针
函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。int (*pi)(const string &,const string &);这个语句将pi申明为指向函数的指针,它所指向的函数带有两个const string& 类型的形参和int类型的返回值。*pi两侧的园括号是必须的:i转载 2017-06-27 13:17:16 · 1112 阅读 · 1 评论 -
内联函数
一、什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数。 栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,函数的死转载 2017-06-27 13:00:00 · 2503 阅读 · 0 评论 -
bzero, memset ,setmem 区别
bzero 原型:extern void bzero(void *s, int n);用法:#include 功能:置字节字符串s的前n个字节为零。 说明:bzero无返回值。 举例: // bzero.c #include #include i转载 2017-06-27 11:36:10 · 924 阅读 · 0 评论 -
fprintf写文件
#include #include #include #include #include using namespace std; struct Employee { std::string name; std::string department; double salary;转载 2017-06-27 11:19:58 · 1327 阅读 · 0 评论 -
epoll
select和poll被鄙视得厉害, 因为有了Linux epoll的存在。 网上讲解select/poll/epoll的例子不胜枚举, 各种比喻, 各种图示。 其实, epoll并没有那么玄乎。 本文中, 我们不进行画图讲解, 也尽量避免过多的文字描述, 只是初步来感受一下epoll. 服务端代码为:[cpp] view plain copy转载 2017-06-27 10:38:33 · 373 阅读 · 0 评论 -
isspace()
原型:extern int isspace(int c) 用法:#include 功能:判断字符c是否为空白符 说明:当c为空白符时,返回非零值,否则返回零。(空白符指空格、水平制表、垂直制表、换页、回车和换行符。) 举例:[cpp] view plain copy print?转载 2017-02-11 18:17:30 · 1855 阅读 · 0 评论 -
strcat()
原型:char *strcat ( char *dest, const char *src) 用法:#include 功能:连接两个字符串;strcat()会将参数src字符串拷贝到参数dest所指的字符串尾。第一个参数dest要有足够的空间来容纳要拷贝的字符串。 说明:strcat()返回dest的字符串起始地址。 举例:转载 2017-02-11 16:58:08 · 380 阅读 · 0 评论 -
memset()
原型:extern void *memset(void *buffer, int c, int count) 用法:#include 功能:把buffer所指内存区域的前count个字节设置成字符c。 说明:返回指向buffer的指针。 举例:[html] view plain copy pri转载 2017-02-11 16:55:56 · 268 阅读 · 0 评论 -
atoi()
原型:int atoi (const char *nptr) 用法:#include 功能:将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回。 说明:atoi()函数返回转换后的整型数。 举例:转载 2017-02-11 16:54:28 · 271 阅读 · 0 评论 -
c的atoi实现
上一篇博客讲的是atoi()函数的功能及举例,现在呢,就自己写写代码(根据atoi()的功能)来表示atoi()函数的实现。我在这里先把atoi()函数的功能贴出来,也好有个参考啊~~~ atoi()函数的功能:将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回转载 2017-02-11 16:49:17 · 278 阅读 · 0 评论 -
mergesort
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plain copy转载 2017-01-27 13:00:00 · 1741 阅读 · 0 评论 -
c++聚合
组合关系(Composition):部分和整体之间具有相同的生命周期,当整体消亡后,部分也将消亡。就像大雁的翅膀和大雁是组合关系。代码实现时,部分类在整体类的构造函数中被构造,在析构函数中被析构。聚合关系(Aggregation):部分与整体之间并没有相同的生命周期,整体消亡后部分可以独立存在。就像大雁和雁群是聚合关系。代码实现时,整体类中传入一个部分类的指针,部分类已经在整体转载 2016-12-12 13:19:05 · 502 阅读 · 0 评论 -
【STL】ptrdiff_t示例
ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型。ptrdiff_t类型变量通常用来保存两个指针减法操作的结果。ptrdiff_t定义在stddef.h(cstddef)这个文件内。ptrdiff_t通常被定义为long int类型。[cpp] view plain copy print?void test_ptrdiff_t()转载 2016-11-11 19:38:07 · 365 阅读 · 0 评论 -
【STL】bitset示例
构造函数bitset b; b有n位,每位都为0.参数n可以为一个表达式.如bitset b0;则"b0"为"00000"; bitset b(unsigned long u); b有n位,并用u赋值;如果u超过n位,则顶端被截除如:bitsetb0(5);则"b0"为"00101"; bitset b(string s); b是string对象s中含有的位转载 2016-11-11 19:36:31 · 228 阅读 · 0 评论 -
指针与const之间的组合,写了个例子温习一下
[cpp] view plain copy print?#include class A { public: A() { this->i = 1; } int get() const { return this->i;转载 2016-11-11 19:04:04 · 413 阅读 · 0 评论 -
C++中Explicit关键字的理解
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,Explicit主要是应用于这种情况,避免出现因为隐式转换出现二意性。如下实例说明:[cpp] view plain copy print?#include #include class mystring { public: explicit mys转载 2016-11-11 18:53:49 · 324 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2016-11-11 15:21:34 · 244 阅读 · 0 评论 -
C++开源程序库评话
C语言天生就与开放结缘。C最初是作为UNIX的系统编程语言而流行起来的,而UNIX可以被认为是第一个产生重大影响的“开源”软件。随着UNIX的流行,C语言逐渐被人们认识和喜爱。很快的,在各个平台上C语言都成为了流行的甚至是统治性的程序设计语言。大约到1980年代中期,C已经成为人类历史上第一种工业级程序设计世界语。很多人都知道,正是C这样一种世界语的出现,才使开源运动的出现和最初发展成为可能,从这转载 2016-11-11 14:59:21 · 277 阅读 · 0 评论 -
使用typedef语句定义数组类型
1. 一维数组类型的定义格式typedef [];例如:(1) typedef int vector[10];(2) typedef char strings[80];(3) typedef short int array[N];第一条语句定义了一个元素类型为int,含有10个元素的数组类型vector,若不使用typedef保留字,则就变成了数组定义,它只定义了一个元素类转载 2016-11-11 14:57:03 · 5466 阅读 · 0 评论 -
C/C++程序员必须熟练应用的开源项目
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟转载 2016-11-11 14:53:10 · 425 阅读 · 0 评论 -
c++高频面试题
malloc/free和new/delete的区别malloc/free是C语言的标准库函数,new/delete是C++的运算符。 由于malloc/free是库函数而不是运算符,不在编译器控制权限之内。对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。(废话) new是类型安全的,malloc不是。int a=new float[2]是通不过编译的,n转载 2016-11-11 14:09:06 · 359 阅读 · 0 评论 -
main函数执行前、后再执行的代码
一、main结束 不代表整个进程结束 (1)全局对象的构造函数会在main 函数之前执行, 全局对象的析构函数会在main函数之后执行; 用atexit注册的函数也会在main之后执行。 (2)一些全局变量、对象和静态变量、对象的空间分配和赋初值就是在执行main函数之前,而main函数执行完后,还要去执行一些诸如释放空间、释放资源使用权等操转载 2016-11-11 00:59:13 · 604 阅读 · 0 评论 -
vector类型变量在main之前初始化
C++初始化普通成员的特点来调用静态初始化函数。当然,这需要定义一个额外的静态成员变量来辅助一下。[cpp] view plain copy print?#include #include #include class Test1 { public: Test1() {转载 2016-11-11 00:56:13 · 931 阅读 · 0 评论 -
c++ 宏-T
1. 定义_T("")是一个宏,定义于tchar.h下。[cpp] view plain copy print?#define _T(x) __T(x) #define __T(x) L ## x 2. 作用他的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNIC转载 2016-11-11 00:53:18 · 415 阅读 · 0 评论 -
c++ nullprt
1. 引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,而只是一个宏定义(macro)。1.1 NULL在C中的定义在C中,习惯将NULL定义为void*指针值0:[cpp] view转载 2016-11-11 00:51:34 · 551 阅读 · 0 评论 -
c++ 11 auto
C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。1. 自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。转载 2016-11-11 00:48:17 · 290 阅读 · 0 评论 -
shmget() 共享内存
#include #include int shmget(key_t key, size_t size, int shmflg);key_t key----------------------------------------------- key标识共享内存的键值: 0/IPC_PRIVATE。 当key的取值为IPC_PRIVATE,转载 2016-11-11 00:34:48 · 960 阅读 · 0 评论 -
c++的union关键字
1. 共用体声明和共用体变量定义 共用体(参考“共用体”百科词条)是一种特殊形式的变量,使用关键字union来定义 共用体声明和共用体变量定义与结构体十分相似。其形式为: union 共用体名{ 数据类型 成员名; 数据类型 成员名; ... } 变量名;共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型转载 2016-11-11 00:30:57 · 816 阅读 · 0 评论 -
变量的存储和作用域
/* 全局变量,固定地址,其他源文件可见*/int global_static;/* 静态全局变量,固定地址,但只在本文件中可见*/static int file_static;/* 函数参数:位于栈帧当中,动态创建,动态释放*/int foo(int auto_param){ /*静态局部变量,固定地址,只在本函数中可见*/ static int fu转载 2016-11-11 00:25:41 · 221 阅读 · 0 评论 -
c++代理类
C++代理类是为了解决这样的问题: 容器通常只能包含一种类型的对象,所以很难在容器中存储对象本身。怎样设计一个c++容器,使它有能力包含类型不同而彼此相关的对象? 代理运行起来和他所代表的对象基本相同,但是允许将整个派生层次压缩在一个对象类型中。[cpp] view plain copy print?#include usin转载 2016-11-11 00:23:57 · 1007 阅读 · 0 评论 -
引用和拷贝构造函数
引用就像能自动地被编译器间接引用的常量型指针。它通常用于函数的参数表中和函数的返回值,但也可以独立使用。使用引用时有一定的规则:1.当引用被创建时,它必须被初始化(指针则可以在任何时候被初始化)。2.一旦一个引用被初始化为指向一个对象,它就不能改变为另一个对象的引用(指针则可以在任何时候指向另一个对象)。3.不可能有NULL引用。必须确保引用是和一块合法的存储单元关联。转载 2016-11-11 00:16:23 · 479 阅读 · 0 评论 -
c++虚函数
声明虚函数的方法是在基类中的成员函数原型前加上关键字virtual.格式如下: class 类名{ …… virtual 类型 函数名(参数表); …… }; 当一个类的成员函数声明为虚函数后,这就意味着该成员函数在派生类中可能有不同的实现,也就是说,该函数在派生类中可能需要定义与其基类虚函数原型相同的函数。转载 2016-11-11 00:12:47 · 315 阅读 · 0 评论