
C/C++
文章平均质量分 71
KentZhang_
提供网络加速、SD-WAN、零信任等网络解决方案。微信号:kentonly2024
展开
-
Golang和C++简单对比
文章目录编译内存管理标准库性能并发编程语法复杂度开发和调试难度总结编译都可以静态编译,直接编译成二进制文件。目前,许多语言(比如Java,C#)都是基于运行时,能静态编译语言的不多,Go算一个。同时,都可以跨平台。内存管理在C++中,需要自己使用new和delete管理内存,尽管C++已经有了智能指针,但是有一些坑,不是那么好用。Go虽是静态语言,但是自己管理内存,减轻了程序员的心智负担。这一点,非常重要。因为C++程序的崩溃,大多数时候都是内存问题,比如内存泄漏,非常难以解决。标准库一门语言原创 2021-08-29 14:08:11 · 7351 阅读 · 3 评论 -
一个简单的socket编程demo
记录这个demo,相当于是保留一份代码片段,以后可以随时拿来用,验证新的想法。人的大脑是很靠谱的,经常记错东西,需要保留一个索引,放在这里。服务端#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include &a原创 2018-12-16 16:44:03 · 1333 阅读 · 0 评论 -
pragma pack和内存对齐
内存对齐内存对齐和CPU有关系,可以认为内存对齐的大小就是CPU一次读取内存的大小,例如32CPU一次读取4字节,那么内存的对齐方式就4字节,64位就是8字节。本质上是保证CPU使用尽量少的次数将某一个变量取出来。pragma pack(n)的作用上面说了,编译默认对齐方式是4字节(32位系统)或者8字节(64)位系统,但是通过pragma pack可以自己定义内存的对齐方式。#pragm...原创 2018-12-16 15:47:53 · 479 阅读 · 0 评论 -
linux下常用时间函数
在linux下编程,有一些常用的时间函数,下面做一个总结梳理。1、timeSYNOPSIS #include <time.h> time_t time(time_t *t);DESCRIPTION time() returns the time since the Epoch (00:00:00 UTC, January 1, 197...原创 2018-11-28 00:32:45 · 403 阅读 · 0 评论 -
STL中map的使用详解
map的本质map本质上一个平衡二叉树(更准确地说是红黑树),那么每个节点存放一个数据,默认是key和value打包成一个数据pair,以pair的形式存放在节点的,由此来看,pair里面可以放任何数据,前提是pair必须可以比较大小,当然也可以自定义比较函数,而map的第三个参数就是指定自定义key的比较函数的。map的定义//map的定义//第一 第二 是key和value的类型//...原创 2018-11-14 18:34:04 · 1064 阅读 · 0 评论 -
goroutine原理分析
文章目录进程和线程进程-——拥有资源的人线程——真正干活的人多线程和多协程多线程——多个人干多件事案例插曲多协程——一个人干多件事本质goroutine的原理GM模型GPM模型关于goroutine底层的线程的数量测试程序一测试程序二测试程序三结论进程和线程在讲解goroutine之前,先来熟悉一下进程和线程的概念,因为只有通过概念之前对比,才能更加理解这些概念。进程-——拥有资源的人计算...原创 2018-11-10 09:40:02 · 2229 阅读 · 0 评论 -
IP地址转换总结
一、IP地址结构体相关定义本文只讨论IPv4的情况,IPv6的相关转换,在项目中我也使用过,基本类似。struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */ in_port_t sin_port; /* port in network byte order原创 2017-03-08 22:33:56 · 610 阅读 · 0 评论 -
gdb调试命令总结
之前已经写过一篇博客《Linux下使用gdb调试C/C++程序》,是一些简单的用法,今天的这一篇可以算是进阶篇。一、关于多线程的使用命令 1、thread 查看当前线程的ID,这ID是GDB对线程的编号,从1开始的。以下所说的线程ID,都是这种ID。 2、info thread 查看当前可以被调试的线程,ID前面有*号的表示GDB当前所在的线程。 3、thread thread_number GDB切换到线程原创 2016-06-09 18:56:33 · 854 阅读 · 0 评论 -
再谈单例模式
之前写过一篇博客 《C++单例模式的模板基类》 http://blog.youkuaiyun.com/kentzhang_/article/details/48206821 但是,最近才发现实际 上 static T* Instance() 的实现是有一点bug 的,下面分析。 static T *Instance() { if(NULL !=原创 2015-11-17 17:04:35 · 558 阅读 · 0 评论 -
Tinyxml解析过程源码分析
tinyxml是一个优秀的,易用的,开源的xml解析库,xml解析的最关键之处,就是如何将xml文件内容解析成内存中的可用、易用的程序数据---DOM(Document Object Model)树。DOM其实就是多叉树,每个节点只需知道自己的第一个子节点(first child)和下一个兄弟节点(next sibling),即可实现元素数据的解析。 有关tinyxml内部的结构设原创 2016-01-09 09:02:26 · 2378 阅读 · 0 评论 -
C++单例模式的模板基类
单例模式是很常用的设计模式,如果希望系统中某个类的对象只能有一个或者有一个就够了,那么便可以采用单例模式来解决。下面用C++实现一个单例模板类,那么其他的类只需继承它,便可以成为单例类。本例中使用了 CMutex类,是考虑多线程的情况,这个类的定义请参见笔者的另一篇博客《C++简单封装互斥量》,链接 http://blog.youkuaiyun.com/kentzhang_/article/det原创 2015-09-04 09:35:52 · 5301 阅读 · 2 评论 -
C++简单封装互斥量
在编写多线程程序中,经常需要遇到多线程同步操作,例如操作sqlite3数据库,写一个日志文件,操作一个链表等,只能同时一个线程操作,因此需要经常用到互斥锁。笔者为了方便使用,采用C++简单封装Linux互斥锁,根据构造函数的参数,可以创建递归互斥锁和非递归互斥锁。代码如下:CMutex.h/******************************************原创 2015-09-02 17:13:12 · 778 阅读 · 0 评论 -
C++封装Linux消息队列
消息队列是Linux进程间通信方式之一,在面向对象编程中,需要对其封装。一、消息队列的特点1、异步通信,消息队列会保存进程发送的消息,其他进程不一定要及时取走消息。2、可以发送不同类型的消息,消息的头部用long类型的字段标记。3、取消息时,不一定按先进先出的方式,可以按消息的类型来取。4、消息队列内部是用一个链表来保存消息,当消息被取走后,这个消息就从链表中删除了,而且这原创 2015-09-03 21:41:36 · 3204 阅读 · 0 评论