我太菜了

喜欢写Hello World的未来程序员.

mmap基本用法和共享内存

用mmap写文件及共享内存

莫道男儿心如铁 君不见满川红叶 尽是离人眼中血 前面写了一篇文章关于luajit2.05中的内存限制,有讲到mmap分配内存中的一些问题,今天就自己动手过一下mmap文件映射内存以及mmap如何共享内存。 文件映射内存 mmap简单例子 往/dev/zero里写是不用考虑文件的大小的,所以很方便,如果是父子进程之间的共享内存的话,使用/dev/zero映射是非常好...

TCP四次挥手及状态解析

天气真好

试问岭南应不好 却道:此心安处是吾乡 理解TCP本身是基于连接的全双工协议,就能够理解TCP的三次握手和四次挥手了,三次握手的目的是确认双方都能收发数据了,随后就能进行通信了;而四次挥手的目的就是双方数据都发送完了,都确认要断开了。 TCP四次挥手 建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话: 套接字A:“任务处理完毕,我希望断开连接。...

TCP数据报及三次握手

天气真好

君埋泉下泥销骨 我寄人间雪满头 又要捡起计算机网络了,其实原来我在github上就有个仓库,整理了这些基础知识。但是最近可能会有面试,准备象征性地复习一下。不知道为什么会有点开心,可能是修福报修久了,偶尔学习一下就会很开心。 进入正题! TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数...

关于luajit2.05中大内存patch实现

luajit内存扩展

绿竹入幽径 青萝拂行衣 前面已经讲了大概的背景,以及如何自定义分配内存的地址,这里会讲luajit的大内存patch是如何利用这点而做到扩展可用内存到4GB的。 首先大概的阅读可以发现,luajit在给部分gc对象分配内存的时候,调用的是lj_alloc_create,这里面不用malloc,而是用mmap,mmap有个标志位MAP_32BIT,这样就会把内存分配在前32位...

关于luajit2.05中的内存限制

luajit内存扩展

晚泊孤舟古祠下 满川风雨看潮生 简单介绍下相关背景,luajit2.05及以下版本在设计的时候就使用的相关手段,使得luajit中各种变量的内存地址被限制在了1-2GB的范围里,所以实际上其使用的空间也不会超过2GB。 这个在stackoverflow上也有相关的问题,然后下面的解答是这样的: 大概意思就是说,在x64的平台上,luajit中通过在mmap函数中使...

42. Trapping Rain Water

你快乐吗

故园便是无兵马 犹有归时一段愁 这道题,我记得去年9月份的时候就见过,但是当时想了一会没想出来就算了,现在还是碰到了。 要能够解这道题,需要转化一下思路,从现实实际着手,而不是死磕套路,这样一下子反而想不起来套路。 这道题如果放现实里就是计算水的体积,只是这里将水坑作了简化,水坑由一块块宽度为1的砖块组成。实际上如果我们在现实生活中计算这个体积,或者是数学题里,会很快想到...

32. Longest Valid Parentheses

你快乐吗

浮云出处元无定 得似浮云也自由 C++,dp,字符串。这道题也有不用dp的解法,但是这种奇技淫巧并不通用,到面试的时候很难想起来,还是老老实实把dp理解好,能够解很多题目。 本题目如果用动态规划,重点是把括号匹配的关系理清楚: (在前,)在后 如果(和)之间是(...)且(...)是有效括号序列,那么...一定由0到多个不定长度的有效括号序列组成 理清括号匹...

C/C++读取elf文件的头部

你快乐吗

鸳鸯被里成双夜 一树梨花压海棠 从libelfin的例子和网上各种资料我也没找到怎么读取elf文件的头部,非常懵逼呀! 其实有种很简单的方法: 不过这是从命令行获取的,肯定是不够的,实际上elf可执行文件/共享库文件都可以当成二进制文件读取。 关于共享库文件和可执行文件 在GCC/G++低版本和CLANG编译的可执行elf文件,其实都是EXEC类型的,其实就是上图...

23. Merge k Sorted Lists

你快乐吗

刀背我藏身 世路风波君自珍 C++,最小堆,链表排序。 这道题做了挺久的,主要是因为堆的实现都忘了,向上调整,向下调整。当然写起来代码也是挺长的,很复杂。这里我为了复习堆的实现,是直接写了一个MHeap类。 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), ne...

10. Regular Expression Matching

你快乐吗

C++,dp,递归,字符串匹配。 像这种题,最容易忘记,索性思路写的详细一点。 大体思路:使用从前往后“消除”的思路,使用双指针,对于指针之前的可以不管,只判断当前位置和以后的字符串的匹配情况,然后使用相同的策略进行递归匹配。 详细匹配步骤: 如果s和p指针都指向\0,则说明已经全部匹配成功了; 如果s和p指针指向的字符相等或者是p指向的是.,说明当前字符匹配成功: ...