C语言的不规则数组的用法,mysql、redis分布式锁的性能对比,skynet中multicast模块的完善,lua中table的误用

     《深入理解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%。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值