小编hac*_*ock的帖子

是从unsigned转换为signed undefined?

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.

c

10
推荐指数
1
解决办法
3392
查看次数

客户端套接字连接被Windows主机上的服务器拒绝为小数(16 <x <24)的同时客户端连接尝试

我们遇到的问题是,当相对较少的节点(16到24,但我们将来需要处理更多)尝试同时连接时,我们的套接字服务器的传入客户端套接字连接被拒绝.

一些细节:

  • 服务器正在Windows 2008或7上运行
  • 我们的主服务器是使用ServerSocket用Java编写的
  • 客户端也是在我们数据中心的网格节点上运行的Windows

当我们尝试在网格上运行测试时,客户端节点会尝试连接到服务器并发送40-100K数据包然后断开连接.使用16到24个节点,我们开始发现客户端连接无法连接到服务器的问题.鉴于此设置,我们尝试最多可能处理16-24个并发客户端连接并失败,这对我们来说根本不适合.

主服务器循环正在侦听常规SocketServer,当它获得连接时,它会生成一个新的Thread来处理连接,立即返回侦听socket.我们还有一个虚拟的python服务器,只需读取和丢弃传入的数据,以及一个在转储数据之前记录数据的C++服务器,并且两者都遇到同样的问题,客户端无法连接之前有多少成功客户端连接的微小变化失败开始了.这使我们相信任何特定的服务器在这个问题上没有错,而且可能是环境问题.

我们首先想到的是套接字上的TCP积压.即使推到很高的水平,这也没有缓解这个问题.Java SocketServer的默认值为50,远低于我们能够处理的值.

我们在同一子网上的机器之间运行测试,并禁用机器上的所有本地防火墙,以防FW对我们与服务器的连接进行速率限制; 没有成功.

我们尝试在运行服务器的Windows机器上调整网络:

  • 减少TimedWaitDelay,但没有效果(在我的Python测试中它不应该因为该测试只运行几毫秒).
  • 将MaxUserPort增加到一个大值,大约65000,但没有效果(这是奇怪的,因为我的Python测试只发送240条消息,所以我甚至不应该接近这种类型的限制).
  • 将TcpNumConnection增加到一个较大的值(不记得确切的数字).同样,我们一次不应该有超过24个连接,所以这不是一个限制.
  • 启动"动态积压"功能,允许消息积压动态增加.我认为我们将最大值设置为2000连接,最小1000个连接,但没有效果.同样,Python永远不应该超过240个连接,所以我们不应该甚至激活动态积压.
  • 除了以上禁用TCP端口的Windows"自动调整".再一次,没有效果.

我的感觉是,Windows在某种程度上限制了入站连接的数量,但我们不确定要修改哪些内容以允许更多的连接.网络上代理限制连接速率的想法似乎也不正确.我们高度怀疑同时连接的数量是否会使物理GB网络过载.

我们很难过.有没有其他人遇到这样的问题,并找到了解决方案?

java sockets windows socketserver windows-networking

7
推荐指数
1
解决办法
1319
查看次数

多处理器机器中posix线程的并发性

我对多处理器机器中posix线程的并发性有一些疑问.我在SO中发现了类似的问题,但没有找到确凿的答案.

以下是我的理解.我想知道我是否正确.

  1. Posix线程是用户级线程,内核不知道它.

  2. 内核调度程序将Process(包含其所有线程)视为一个用于调度的实体.它是线程库,它反过来选择运行哪个线程.它可以在可运行的线程中分割内核给出的CPU时间.

  3. 用户线程可以在不同的cpu核心上运行.即让线程T1和T2由进程(T)创建,然后T1可以在Cpu1中运行,T2可以在Cpu2中运行但是它们不能同时运行.

如果我的理解正确,请告诉我.

谢谢...

linux multithreading posix scheduling linux-kernel

5
推荐指数
2
解决办法
2571
查看次数

在return语句中调用构造函数

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)

c++ visual-c++

4
推荐指数
2
解决办法
6183
查看次数

NRVO案例中const返回类型的相关性

这是来自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而在返回步​​骤期间不创建临时情况的情况.要返回的对象直接构造在被调用者的地址上.

c++

3
推荐指数
1
解决办法
144
查看次数

需要澄清位移

void test()
{

    unsigned char c;
    c = (~0)>>1 ;  
    printf("c is %u\n",c); 

}
Run Code Online (Sandbox Code Playgroud)

它打印255.我期待127,因为我期望在右移后最左边的位设置为0.这是因为我的编译器正在进行右旋转吗?

c

2
推荐指数
1
解决办法
128
查看次数

为什么编译器没有将此标记为错误而不是警告?

#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++ visual-studio-2008 visual-c++

1
推荐指数
1
解决办法
112
查看次数