
C++
oria2006
这个作者很懒,什么都没留下…
展开
-
Localtime函数导致的内存泄漏及性能下降的问题
今天发现项目用C写的采集端程序性能始终跑不上去,看代码发现取时间用了localtime函数,这个函数有两个大坑:第一个坑是它返回的指针是固定的;第二个坑是它内部有个锁。第一个坑是多次调用的时候虽然指针变量不一样,但是地址一样,所以前面的调用会被最后一次调用的值给覆盖掉,但如果每次调用都是返回不同的地址那问题就更大了,会导致内存泄漏。第二个坑是在并行处理的程序中调用会存在锁等待的问题。今天就是遇到这个坑了。redis代码里面有个无锁版的localtime,换上之后问题解决void nolocks原创 2020-12-10 17:59:13 · 1176 阅读 · 0 评论 -
Linux C语言热加载技术
ptrace原创 2020-11-30 11:42:58 · 522 阅读 · 0 评论 -
C语言实现的通用链表
大部分C实现的链表(包括教材上的实例)都是将链表结构和链表节点的值写在同一个结构体中,如下typedef struct mlist_node{ int value; struct mlist_node *next; struct mlist_node *prev;}mlist_node_t;很显然这样代码无法通用性,换一个功能value可能就是char或者结构类型了。为了实现通用性,节点可以这样定义,将节点的value定义成指针类型,他可以指向任意值typed原创 2020-11-25 15:42:32 · 424 阅读 · 1 评论 -
Linux C 几种异常问题解决方法
段错误1.gdb调试https://blog.youkuaiyun.com/oria_2006/article/details/80982704?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160612186719725225060985%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=160612186719725原创 2020-11-24 09:07:59 · 1988 阅读 · 0 评论 -
一种能够提升CS架构中服务端性能的方法
服务端并发处理数据目前基本都是在数据处理阶段采用并发技术,这主要有两个原因:第一,一般情况下瓶颈都卡在数据处理阶段,比如磁盘读写;第二,实现不了并发接收数据,因为服务端口,比如WEB服务80端口,只能绑定到一个socket上。对于有些使用场景,比如客户端向服务端推送大量数据包,这时候如果接收端不能并发处理可能会存在丢包丢数据的情况。为了能够实现并发接收数据,可以为服务端绑定多个服务器端口。但是标准的端口号只有一个,比如WEB服务80端口,绑定的其它扩展端口,网络中的其它客户端是不知道的,客户端只原创 2020-11-23 16:36:16 · 556 阅读 · 0 评论 -
Socket 安全读和写(read/write)
接手的一个小程序,因为原本已经在线上运行了一段时间,本着能不动就不动的原则,没有调整源码。但是看到源码中读写还是直接调用的read和write的,还是忍不住把这块改了int myRead(int fd, char *buf, int count){ ssize_t nread, totlen = 0; while(totlen != count) { nread = read(fd,buf,count-totlen); if (nread == 0)原创 2020-11-23 16:22:21 · 255 阅读 · 0 评论 -
Socket KeepAlive问题
最近接手的一个C/S架构的小程序,据说一直有个小问题:运行一段时间后三个socket中的一个就无法send数据,PRE环境正常,PRD环境才会出现该问题。前两天又被我遇到了,看了一下代码send的时候对链接状态都做了判断,看了socket状态也是ESTABLISHED。分析原因可能是该socket长时间没数据,然后中间设备超时导致的。增加keepalive验证了几天,就没再出现问题。keepalive代码直接用的redis中的源码:/* Set TCP keep alive option原创 2020-11-19 16:15:31 · 403 阅读 · 0 评论 -
MinGW 屏蔽命令CMD窗口
源码文件增加:#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )编译时增加--subsystem,windowsg++ -o mysql_client.exe mysql_client.c -lmysql -Wl,--subsystem,windows原创 2020-11-18 17:02:27 · 633 阅读 · 1 评论 -
C语言实现的split
#include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <malloc.h>int split(char **strOut, char *strIn, char* separator){ int counter = 0; char *bu.原创 2020-10-09 12:04:49 · 1219 阅读 · 0 评论 -
算法题——回文数
题目是各大厂的面试题,代码是自己写的class Solution {public: bool isPalindrome(int x) { long long int res = 0; int v = x; int flag = 1; int m = 0; if (x < 0){ ...原创 2020-01-10 15:41:16 · 291 阅读 · 0 评论 -
算法题——合并两个有序链表
题目是各大厂的面试题,代码是自己写的因为是两个有序链表,虽然有用了循环嵌套,但实际时间复杂度是O(n)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NUL...原创 2020-01-09 15:33:51 · 296 阅读 · 0 评论 -
算法题——删除链表的倒数第N个节点
题目是各大厂的面试题,代码是自己写的要求时间复杂度O(n)——只能遍历一遍 /*** *** 1.单链删除一个节点 需要知道被删除节点前后节点的位置 *** 2.需要删除倒数第N个节点,所以我们要知道第N-1个节点的位置 *** 3.特殊情况,如果倒数第N个节点就是第一个节点,需要单独处理 ***/class Solution {public: ListNode* r...原创 2020-01-08 17:23:05 · 186 阅读 · 0 评论 -
算法题——字符串转换整数 (atoi)
题目是网上的,代码是自己写的https://leetcode-cn.com/problems/string-to-integer-atoi/示例1:输入: "42"输出: 42示例2:输入: " -42"输出: -42解释: 第一个非空白字符为 '-', 它是一个负号。 我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。示例3:...原创 2020-01-07 20:05:21 · 521 阅读 · 0 评论 -
Socket实现C/S架构的基本代码
目录Client端代码Server端代码:Server端多线程版本代码:Client端代码#include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/socket.h>#in...原创 2019-12-27 14:47:20 · 619 阅读 · 1 评论