哈希表

一般的表,如果需要查找某个关键字的记录,就得从表头开始,挨个地比较记录a[i]和key的值是否相等,如果相等就算成功找到了,返回i;假如是有序表来查找,可以通过a[i]和key来二分查找,直到找到相应的i;最终为了找到那个i,其实也就是相对的下标,再通过顺序存储的存储位置来计算,也就是第一个元素内存存储位置加上i-1个单元位置LOC(ai)=LOC(a1)+(i-1)*c,得到最后内存地址

由此可[……]

Read more

再看malloc动态分配内存

一向对内存敏感性不好,或者说不太有sense,基础恶补恶补很有必要,结合刚看了下一个日本人写的关于malloc的讲解,理清下思路

malloc()是根据参数指定的尺寸来分配内存块,返回指向内存块初始位置的指针,经常用于动态分配结构体的内存领域,分配执行前还不知道大小的数据的内存区域等

p = malloc(size);
free(p);

一旦内存分配失败(内存不足?),malloc()会返回NULL[……]

Read more

移位

2年前被Boss问了个问题,好像就是变量的倍数如何写,迟疑地问:不是直接乘么?然后结果可想而知,当然当时想要我回答的答案是移位,时过境迁,突然在想,如今这么潮的编译器难道不会优化成移位么

移位<<和>>用于左移和右移,最简单的x<<2将x的值左移两位,右边空出来了两位用0来补,实际上含义就是x乘以4;对于unsigned无符号值进行右移,左边空出来的部分用0来补[……]

Read more

socket双向通信

既然能够进行数据传输,那干脆再试着进行双向数据传输,就变成了简单的命令行聊天室一样,但是需要考虑几个问题

1:socket是否是双向数据传输,幸运的是肯定的

2:如果一端既发送又接收,如何调和的问题,不可能串行一前一后吧,这样发送和接收肯定无法都实时刷新结果,最简单的就是弄两个进程或者两个线程,一个发送一个接收,这里分别通过while(1)来持续操作

下面是分别通过多进程实现,code比较简单随意[……]

Read more

socket建立连接

通过pipe,fifo等可以直接同一台机器上进行进程间通信,而通过网络相连的机器之间进行进程间通信要用到套接字接口,实际上套接字可以用在同一台机器上,也可以用在不同的机器上;也就是既可以内部通信,又可以相互之间通信

套接字是通信端点的抽象,和文件描述符一样,访问套接字也需要套接字描述符,处理文件描述符的read,write都可以处理套接字描述符

1:调用socket函数就会创建一个socket描述[……]

Read more

信息存储和字节序

计算机使用8位字节块作为最小寻址和存储单位,一个字节在二进制里值域为00000000~11111111,十进制就是0~255,而这种表示方法要么太长了,要么转换太麻烦,所以就用十六进制来描述,值域为00~FF,把A的二进制记住就行了,后面就好推算了,当然大脑比较灵活的人啥都不用记,直接心算一遍好了~!

十六进制                        十进制[......]

Read more