我正在为一个国际象棋变种引擎调试我的换位表,其中可以放置碎片(即最初不在板上).我需要知道我经常遇到关键的碰撞.我正在保存每个表索引中的片段列表以及通常的哈希数据.我确定两个位置是否相等的简单解决方案是转换失败,因为我是线性比较两个列表.
请不要建议我应该以板为中心而不是以件为中心进行存储.由于可放置和捕获的碎片的独特性,我必须存储碎片清单.这些状态中的碎片就像它们占据了重叠且无位置的位置.请查看存储片段的说明.
// [Piece List]
//
// Contents: The location of the pieces.
// Values 0-63 are board indexes; -2 is dead; -1 is placeable
// Structure: Black pieces are at indexes 0-15
// White pieces are at indexes 16-31
// Within each set of colors the pieces are arranged as following:
// 8 Pawns, 2 Knights, 2 Bishops, 2 Rooks, 1 Queen, 1 King
// Example: piece[15] = 6 means the black …
Run Code Online (Sandbox Code Playgroud) 我需要最有效的方法(在cpu周期中)来确定两个数字是否具有相同/不同的符号.但问题是,如果任一数字为零,我需要能够将其与具有相同/不同符号的数字区分开(即,零被视为"第三"符号).以下代码与我需要的类似,但只要只有三个不同的返回值,返回值就可以是任何值.
int foo(int x, int y) {
if (x * y > 0) return 1;
if (x * y < 0) return -1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于我的具体问题,值在[-6,6]范围内,并且X保证不为0.我找到了一个解决方案,找出两个数字是否具有相同的符号,并对其进行修改以获得以下解决方案.
return y? (((x^y) >= 0)? 1 : -1) : 0;
Run Code Online (Sandbox Code Playgroud)
应该有一些bitops /比较比使用乘法,分支,比较更快的结果.
在函数中使用struct参数时,clang将更改函数签名.签名将是一个相同大小的强制int,而不是使用结构类型.在我的编译器项目中,我使用llvm结构类型作为方法签名(这似乎更合乎逻辑).
这不会是一个问题,除了LLVM在使用struct或coerced类型时产生的汇编是不同的而不是调用兼容的事实.这导致我的编译器不与具有结构的C函数ABI兼容.
为什么clang这样做?这是C ABI中指定的内容吗?
这是一个简单的示例C源文件:
struct TwoInt { int a, b; };
struct EightChar { char a, b, c, d, e, f, g, h; };
void doTwoInt(struct TwoInt a) {}
void doEightChar(struct EightChar a) {}
int main()
{
struct TwoInt ti;
struct EightChar fc;
doTwoInt(ti);
doEightChar(fc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从Clang得到的LLVM-IR
%struct.TwoInt = type { i32, i32 }
%struct.EightChar = type { i8, i8, i8, i8, i8, i8, i8, i8 }
define void @doTwoInt(i64 %a.coerce) nounwind uwtable {
%a …
Run Code Online (Sandbox Code Playgroud) 我正在使用mongodb c ++ BSON库.我最近升级到使用mongodb 3.0,现在用64位整数序列化BSON给出:
{"time": {"$numberLong": "123"}}
Run Code Online (Sandbox Code Playgroud)
当我这样称呼时:
BSON("time" << time).jsonString()
Run Code Online (Sandbox Code Playgroud)
我的客户端代码无法处理这个,而是需要json:
{"time": 123}
Run Code Online (Sandbox Code Playgroud)
我如何获得mongodb 2.4的旧行为?
更新1:按建议添加打印"this".
更新2:拆分为多个文件以尝试阻止gcc优化.
更新3:记录的复制构造函数并输入添加功能.
更新4:添加了Clang的输出和main中的第二个cout.
我希望将参数析构函数作为函数中的最后一个语句来调用.从此以后,我希望下面的代码输出如下.
default constructor: 008DFCF8
other constructor: 008DFCEC
copy constructor: 008DFBC0
in member add
destroying: 008DFBC0
copy constructor: 008DFBB8
copy constructor: 008DFBB4
in function add
destroying: 008DFBB4
destroying: 008DFBB8
3 == 3
end of main
destroying: 008DFCEC
destroying: 008DFCF8
Run Code Online (Sandbox Code Playgroud)
使用MSVC(Visual Studio)时,输出是预期的.但GCC(4.8.2-19ubuntu1)输出以下内容,表明函数参数的析构函数是在main()中的第一个cout语句之后但在最后一个之前调用的.
default constructor: 0x7fff2fcea510
other constructor: 0x7fff2fcea520
copy constructor: 0x7fff2fcea550
in member add
copy constructor: 0x7fff2fcea540
copy constructor: 0x7fff2fcea530
in function add
3 == 3
destroying: 0x7fff2fcea530
destroying: 0x7fff2fcea540
destroying: 0x7fff2fcea550
end of …
Run Code Online (Sandbox Code Playgroud) 我有两个列表,我需要确定它们是否包含相同的值而不进行排序(即,值的顺序无关紧要).我知道排序可以工作,但这是性能关键部分的一部分.
项目值在[-2,63]范围内,我们总是比较相同大小的列表,但列表大小的范围是[1,8].
示例列表:
A = (0, 0, 4, 23, 10)
B = (23, 10, 0, 4, 0)
C = (0, 0, 4, 27, 10)
A == B is true
A == C is false
Run Code Online (Sandbox Code Playgroud)
我认为一个可能的解决方案是比较两个列表的乘积(将所有值相乘),但这个解决方案存在问题.如何处理零和负数.解决方法是在乘法之前为每个值添加4.这是我到目前为止的代码.
bool equal(int A[], int B[], int size)
{
int sumA = 1;
int sumB = 1;
for (int i = 0; i < size; i++) {
sumA *= A[i] + 4;
sumB *= B[i] + 4;
}
return (sumA == sumB)
}
Run Code Online (Sandbox Code Playgroud)
但是,无论列表的顺序/内容是什么,这总是有效吗?换句话说,以下数学上是真的吗?所以我真正要求的是以下(除非有另一种方法来解决问题):
给出2个相同大小的列表.如果列表中的乘积(将所有值相乘)相等,则列表包含相同的值,只要这些值是大于0的整数即可.
我正在为在线回合制游戏编写tcp服务器.我已经使用php套接字编写了一个原型,但是想转向C++.我一直在看流行的网络库(ASIO,ACE,POCO,LibEvent),但目前还不清楚哪一个最适合我的需求:
1)连接是持久的(大约几分钟),服务器必须能够处理100多个同时连接.
2)连接必须能够维护状态信息(用户登录信息).[我的php原型目前要求每个客户端请求包含登录信息]
3)可选地且优选地多线程,但是单个过程.不希望每个连接没有1个线程,而是在所有打开的连接上使用固定数量的线程.
我倾向于POCO的TCPServer或Reactor框架,但不确定它们是否符合我的要求.我认为Reactor是单线程的,TCPServer强制执行1:1线程/连接.我对么?
在任何一种情况下,我都不确定如何完成将登录信息与特定连接相关联的最重要任务,其中连接随机进出.
c++ ×4
algorithm ×2
performance ×2
abi ×1
ace ×1
boost-asio ×1
chess ×1
clang ×1
destructor ×1
json ×1
llvm ×1
mongodb ×1
optimization ×1
poco ×1
struct ×1