我正在创建一个C包装器,它可以读取存储在文本文件中的数据结构类型。接口应该是我可以生成映射到唯一数据结构的唯一ID,并通过唯一ID修改包装函数。
问题是我需要能够生成一个唯一的id来映射。我想不使用任何外部库。有没有办法没有任何大的开销?
答案 0 :(得分:1)
我想您希望id(实际上)在世界范围内是独一无二的(因此在两台不同机器上的两台不同计算机上运行程序的两个进程总是会有不同的ID)。
否则,只需在包装中使用static long counter;
然后使用id = counter++;
。
您可以将UUID用于此目的。
或者您可以生成随机-e.g. 24个字节 - 字符串(或两个或三个随机uint64_t
个数字)。如果您的数字是“足够”随机的(至少如果您在启动时使用随机种子播种好PRNG,例如使用随机源àlarandom(4)或当前时间&进程ID& ;主机ID;确保使用具有足够大状态的PRNG)collisions的概率应该可以忽略不计(但我无法或不愿意量化它)。
FWIW,在我的MELT监视器中,我在我的文件random.c的例行mom_make_random_idstr
中做了类似的事情(在Linux上);随机字符串包含一组限制良好的字符(与C标识符兼容)。
你也可以从MongoDb objids中获取灵感。