void fun(){
signed int a=-5;
unsigned int b=-5;
printf("the value of b is %u\n",b);
if(a==b)
printf("same\n");
else
printf("diff");
}
Run Code Online (Sandbox Code Playgroud)
它是印刷:
4294967291
相同
在第二行中,有符号值转换为无符号值.所以b的值为UINTMAX + 1 - 5 = 4294967291.
我的问题是比较操作中发生了什么.
1)是否再次转换为无符号并与b进行比较?
2)b(即无符号)是否会被转换为有符号值并自动进行比较?
3)由于int溢出,是否从unsigned转换为signed undefined?
我已阅读有关该主题的其他帖子.我只想澄清问题2和问题3.
我们遇到的问题是,当相对较少的节点(16到24,但我们将来需要处理更多)尝试同时连接时,我们的套接字服务器的传入客户端套接字连接被拒绝.
一些细节:
当我们尝试在网格上运行测试时,客户端节点会尝试连接到服务器并发送40-100K数据包然后断开连接.使用16到24个节点,我们开始发现客户端连接无法连接到服务器的问题.鉴于此设置,我们尝试最多可能处理16-24个并发客户端连接并失败,这对我们来说根本不适合.
主服务器循环正在侦听常规SocketServer,当它获得连接时,它会生成一个新的Thread来处理连接,立即返回侦听socket.我们还有一个虚拟的python服务器,只需读取和丢弃传入的数据,以及一个在转储数据之前记录数据的C++服务器,并且两者都遇到同样的问题,客户端无法连接之前有多少成功客户端连接的微小变化失败开始了.这使我们相信任何特定的服务器在这个问题上没有错,而且可能是环境问题.
我们首先想到的是套接字上的TCP积压.即使推到很高的水平,这也没有缓解这个问题.Java SocketServer的默认值为50,远低于我们能够处理的值.
我们在同一子网上的机器之间运行测试,并禁用机器上的所有本地防火墙,以防FW对我们与服务器的连接进行速率限制; 没有成功.
我们尝试在运行服务器的Windows机器上调整网络:
我的感觉是,Windows在某种程度上限制了入站连接的数量,但我们不确定要修改哪些内容以允许更多的连接.网络上代理限制连接速率的想法似乎也不正确.我们高度怀疑同时连接的数量是否会使物理GB网络过载.
我们很难过.有没有其他人遇到这样的问题,并找到了解决方案?
我对多处理器机器中posix线程的并发性有一些疑问.我在SO中发现了类似的问题,但没有找到确凿的答案.
以下是我的理解.我想知道我是否正确.
Posix线程是用户级线程,内核不知道它.
内核调度程序将Process(包含其所有线程)视为一个用于调度的实体.它是线程库,它反过来选择运行哪个线程.它可以在可运行的线程中分割内核给出的CPU时间.
用户线程可以在不同的cpu核心上运行.即让线程T1和T2由进程(T)创建,然后T1可以在Cpu1中运行,T2可以在Cpu2中运行但是它们不能同时运行.
如果我的理解正确,请告诉我.
谢谢...
class test{
public:
int data;
test(const test& ){cout<<"INSIDE COPY CON "<<endl;}
test(int val = 0) : data(val){ cout<<"INSIDE CON "<<endl; }
test testfun(const test& obj)
{
cout<<"data : "<<data<<endl;
//test test3(this->data + obj.data);
//cout<<"test3 :"<<test3.data<<endl;
//return test3; //This will work only if return type is changed to const ref
return test(data + obj.data);
}
};
int main()
{
test testO1(1);
test testO2(2);
test testO3 = testO1.testfun(testO2);
cout<<testO3.data<<endl;
getchar();
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
INSIDE CON
INSIDE CON
data : 1
INSIDE CON
3 …Run Code Online (Sandbox Code Playgroud) 这是来自return语句中的Calling构造函数的后续问题.
这是一个操作员在课堂上过载的乐趣.
const Integer operator+(const Integer& IntObject)
{
cout << "Data : " << this->data << endl;
return Integer(this->data + IntObject.data);
}
Run Code Online (Sandbox Code Playgroud)
const在这些函数的返回类型中的相关性是什么?
int main()
{
Integer A(1); //Create 2 object of class Integer
Integer B(2);
const Integer C = A + B; //This will work
Integer D = A + B; //This will also work
fun(A + B); //Will work
}
void fun(Integer F) {}
Run Code Online (Sandbox Code Playgroud)
这是由于NRVO而在返回步骤期间不创建临时情况的情况.要返回的对象直接构造在被调用者的地址上.
void test()
{
unsigned char c;
c = (~0)>>1 ;
printf("c is %u\n",c);
}
Run Code Online (Sandbox Code Playgroud)
它打印255.我期待127,因为我期望在右移后最左边的位设置为0.这是因为我的编译器正在进行右旋转吗?
#include <iostream>
using namespace std;
class test{
public:
test() { cout<<"CTOR"<<endl; }
~test() { cout<<"DTOR"<<endl; }
};
int main()
{
test testObj();
cout<<"HERE"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
HERE
Run Code Online (Sandbox Code Playgroud)
编译器跳过"test testObj();"行并用警告编译其余部分,并在运行时生成输出.警告是"VC++ 2008中没有调用原型函数(是一个变量定义?).为什么不抛出错误?
c++ ×3
c ×2
visual-c++ ×2
java ×1
linux ×1
linux-kernel ×1
posix ×1
scheduling ×1
sockets ×1
socketserver ×1
windows ×1