《深入理解C指针》对指针进行了深入分析,总体而言,内容偏浅。其中对C语言不规则数组进行了详细的讲解,这里也是我之前没有深刻理解的部分。如下示例:
#include <stdlib.h>
#include <stdio.h>
void out(int (*(a[])),int* cols, int row)
{
for(int i=0;i<row;++i)
{
for(int j=0;j<cols[i];++j)
{
printf("[%d][%d](%d)\n",i,j,a[i][j]);
}
}
}
int main()
{
int (*(a[]))={
(int[]){1,2,3},
(int[]){4,5},
(int[]){6}
};
int b[]={3,2,1};
out(a,b,3);
return 0;
}
虽然这种用法,在开发过程中用不到,但是一旦掌握,对C语言的内存布局和指针的理解,就会更加深刻。对指向不规则数组的指针的定义,我之前也没有充分理解,现在也理解了。
最近开发了玩家数据迁移的基础模块,考虑到玩家一个账号在多个服务器有角色,并且可能多个设备同时在不同的服务器游戏的情况,使用了分布式锁,开始使用了mysql的unique key做为方案,当插入不成功时,证明迁移没有结束,但是我对用mysql来做分布式锁的效率没有信心,做了个测试,先将数据缓存不重复的100000份,逐个向mysql写入,在我的虚拟机上测试下来,117次/秒,很不理想,后面,我用redis的set nx来作为分布式锁,也是事先将数据缓存不重复的100000份,逐个向redis写入,在我的虚拟机上测试下来,5623次/秒,mysql和redis的差距太大了,由此,我对redis作为高性能的分布式锁有了更多的敬畏。
前面记录过,在skynet中发送multicast协议时,二级指针指向的内存在发送指针地址之前会用jemalloc释放(并没有调用free释放,有jemalloc来管理),也是不安全的,应该和数据部分一起释放(在引用计数减为0的时候)。
lua中table的误用,默认了lua的table里的第一行记录,在pairs迭代时是第一个被迭代到。
这么多年的开发经历,得出了一个真理,程序中的一切问题,用自己能理解的语言,清晰、准确的表达出来,就已经解决了70%。
05-18
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交