摘要:时至2018年的今天,C++ 在互联网服务端开发方向依然占据着相当大的份额;百度,腾讯,甚至以java为主流开发语言的阿里都在大规模使用C++做互联网服务端开发,而这恰恰是本文想要讨论的范畴。 第1章 C++协程近况简介 协程分两种,无栈协程(stackless)和有栈协程(stackful),前者
阅读全文
随笔分类 - C++/C
摘要:当服务器close一个连接时,若client端接着发送数据,根据TCP的规定会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 又或者当一个进程向某个已经收到RST的socket执行写操作是,内核向该进程发送一
阅读全文
摘要:现象: linux下C++开发的网络服务器程序,在页面刷新时有时候会出现进程退出的情况。使用gdb调试,发现是系统发送了SIGPIPE信号,导致进程退出的。 规避或解决方法: 最根本的解决办法是提高socket编程recv或send函数的健壮性。对返回值做全面的稳妥的处理。 最有效的规避方法是在进程
阅读全文
摘要:值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简
阅读全文
摘要:协程库state threads library(以下简称st)是一个基于setjmp/longjmp实现的C语言版用户线程库或协程库(user level thread)。 这里有一个基本的协程例子 http://www.csl.mtu.edu/cs4411.ck/www/NOTES/non-lo
阅读全文
摘要:<一>下载最新版的WinDbg工具,有两种方式,假设我的电脑系统为Win 10,Windows 10必须周年更新版本哦,那么可以去这个官网下载。 有两种版本:第一种版本是在微软应用商店下载的WinDbg Preview版本,这个版本UI更加好看,如果你有需求可以直接在这个网站下载,也可以下载exe版
阅读全文
摘要:内存泄露查找方法 C++程序员经常不注意内存使用的关闭,虽然此类问题不会导致程序逻辑问题,但随着时间的推移,内存占用量越来越多,最终导致程序崩掉。对服务端的程序,内存泄漏经常是致命的。 对于已经存在内存泄露的程序,可能Windbg查找内存泄露的代码。下面介绍如果通过Windbg查找内存泄露。 Win
阅读全文
摘要:在大型项目中,内存泄露并不会立即crash,会使系统性能不断下降,甚至因内存耗尽而崩溃。排查起来难度也比较大,申请内存的地方很多。这里介绍的这种方法可以迅速定位问题。 下面的程序crash64,每秒会申请1M的内存,而一直都没有释放,产生内存泄露 windbg 中有个小工具 UMDH可以追踪系统每个
阅读全文
摘要:使用SDK的PSAPI (Process Status Helper)中的BOOL GetProcessMemoryInfo( HANDLE Process, PPROCESS_MEMORY_COUNTERS ppsmemCounters, DWORD cb);typedef struct _PRO
阅读全文
摘要:使用场景: 自己的32位exe需要占用1.6G内存的使用,在Win7 64位环境中,由于系统内存限制,无法申请到这些内存,发生崩溃! // 我自己使用的代码模板: //第一步,进入目录 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enter
阅读全文
摘要:前言 skynet是我们游戏服务端的底层框架,当初在技术选型的时候仔细阅读过它的源码,发现它是一个C语言的工程典范。大多数游戏服务端,要么使用C++,要么使用java,使用C是非常少见的。但是skynet通过C和Lua的结合,实现了一个高效的游戏框架,C层没有多余的一堆三方库,只有紧凑的核心结构,提
阅读全文
摘要:1、连续存储 2、二维数组的行地址与列地址 1)行地址 1、二维数组中,数组名a的值,是数组a首元素a[0][0]的地址,即&a[0][0],第一行第一个元素的地址; 2、二维数组中,数组名a+1是数组a的元素a[1][0]的地址,即&a[1][0],第二行第一个元素的地址; 2)列地址 1、二维数
阅读全文
摘要:1、C++ const 常量折叠 所谓的常量折叠是编译器的一种优化技术,也就是代码编译时时 const 常量表达式直接替换成立即数。 不过需要注意的时,const 常量仍然会分配内存空间。 #include <iostream> using namespace std; int main(void)
阅读全文
摘要:编译程序遇到问题 relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; 发现编译的程序引用的一个库(.a文件)是直接用./configure 编译的, 64位机器不能直接./conf
阅读全文
摘要:判断操作系统 通过使用内置的宏,可以进行操作系统判断 1.windows下内置了宏 WIN32 2.linux下内置宏 linux 3.Solaris下内置宏 __sun 编译器判断 VC编译器宏 _MSC_VER GCC/G++编译器宏 __GNUC__ SunCC编译器宏 __SUNPRO_C和
阅读全文
摘要:转载:visual-studio – 如何支持vcxproj到项目的cmake? 时间: 2017-09-12 21:20:45.0标签: visual-studio visual-studio-2010 makefile cmake 译文: 来源翻译纠错 我正在开发跨平台的c项目。最初的想法是使用
阅读全文
摘要:【文章摘要】简单对象访问协议(SOAP)是交换数据的一种协议规范,是一种轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息。在实际的软件开发项目中,SOAP大多用于处理用户数据,也即实现开户、销户、改户和查户等功能。本文根据作者实际从事过的基于SOAP的项目开发,对SOA
阅读全文
摘要:void func(int i, double d, const string& s) { cout << i << ", " << d << ", " << s << endl; } int main() { thread t(func, 1, 12.50, "sample"); t.join()
阅读全文
摘要:webassembly的作用 webassembly是一种底层的二进制数据格式和一套可以操作这种数据的JS接口的统称。我们可以认为webassembly的范畴里包含两部分 wasm: 一种体积小、加载快并且可以在Web浏览器端运行的底层二进制数据格式,并且可以由C++等语言转化而来 webassem
阅读全文
摘要:volatile的介绍 volatile类似于大家所熟知的const也是一个类型修饰符。volatile是给编译器的指示来说明对它所修饰的对象不应该执行优化。volatile的作用就是用来进行多线程编程。在单线程中那就是只能起到限制编译器优化的作用。所以单线程的童鞋们就不用浪费精力看下面的了。 没有
阅读全文