首先,定义两个没有括号的常量表达式是我的错:
#define BIG_INTERVAL 60 * 60 * 1000
#define SMALL_INTERVAL 1 * 1000
int i = 1;
if (i >= BIG_INTERVAL / SMALL_INTERVAL - 1)
{
printf("Oops!\n");
}
Run Code Online (Sandbox Code Playgroud)
该if宏展开后声明if(i >= 60 * 60 * 1000 / 1 * 1000 - 1).
那不是我的意图.但我发现一些奇怪的事情,如果我写的if (i >= 3600000000 - 1).这是假的.
什么类型60 * 60 * 1000 / 1 * 1000 - 1?int?
我写了一个结构
struct Tree{
struct Node *root;
struct Node NIL_t;
struct Node * const NIL; //sentinel
}
Run Code Online (Sandbox Code Playgroud)
我想要
struct Node * const NIL = &NIL_t;
Run Code Online (Sandbox Code Playgroud)
我无法在结构中初始化它.我正在使用msvs.
我使用C,而不是C++.我知道我可以在C++中使用初始化列表.
如何在C中这样做?
这是代码:
当有31个团体时会发现:
try
{
regex re("(0)(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)", tr1::regex::icase);
}
catch (regex_error e)
{
std::cout << e.what();
}
Run Code Online (Sandbox Code Playgroud)
但是,我尝试再添加一个组(共32组),oops:
try
{
regex re("(0)(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)", tr1::regex::icase);
}
catch (regex_error e)
{
std::cout << e.what();
}
Run Code Online (Sandbox Code Playgroud)
捕获并打印regex_error异常
正则表达式错误
我在Windows 7上使用VisualStudio 2010
似乎群体有最大限制.我怎样才能突破极限?
我正在尝试在Windows中运行Linux服务器.
在Linux中,套接字和文件描述符的处理方式相同.某些系统api可用于套接字和文件描述符.
但是,我通过WIN API处理Winsock和HANDLE(文件描述符)的socket.
所以我需要知道一个整数是一个套接字或一个HANDLE.
现在问题是:
在Windows中,socket()和open()的返回值是否相同?
如果它们总是不同,我可以编写自己的socket()和open()来包装系统的一个.并记录系统api的返回值,无论整数是套接字还是HANDLE.
如果它们是相同的,我不知道如何处理它.
我每分钟都有数以千计的小文件(大约1 KB)上传到S3.如果我上传循环中的每个文件"发送我的HTTP请求 - 等待S3的HTTP响应 - 发送下一个请求 - 等待下一个响应...",则需要花费大量时间,因为我必须等待S3和我的服务器之间的2次延迟.当然我已经使用了HTTP Keep-Alive标头.
所以我尝试发送多个HTTP请求而不等待相应的(HTTP流水线).我尝试批量发送20个请求并等待20个响应.我预计这可能会节省很多时间,因为我仍然可以在前一个响应途中发送请求.
然而,它并没有让世界变得更好.
我在大约200ms内发送了20个请求,然后我尝试收到响应.我希望我收到响应的速度与收到第一个响应后发送请求的速度一样快,就像这个图表一样.
事实是,在我收到第一个回复之后,我必须等待大约300毫秒的每一个回复.与发送一个请求和接收一个响应相比,它没有任何好处.
为什么我不能缩短流水线技术的时间?为什么S3为每个请求花费了这么多时间?S3是否支持HTTP流水线操作?
谢谢.
InterlockedCompareExchangeRelease()和之间有什么区别InterlockedCompareExchangeAcquire()?
当我尝试使用WIN32 API学习同步函数时,我发现有两个名称不同的函数,但似乎做同样的事情:
LONG __cdecl InterlockedCompareExchangeRelease(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
Run Code Online (Sandbox Code Playgroud)
和
LONG __cdecl InterlockedCompareExchangeAcquire(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
Run Code Online (Sandbox Code Playgroud)
我检查MSDN,它说这些功能是:
对指定的值执行原子比较和交换操作.该函数根据比较结果比较两个指定的32位值并与另一个32位值进行交换.
但对于InterlockedCompareExchangeAcquire(),
使用获取内存访问语义执行操作.
并且InterlockedCompareExchangeRelease(),
使用释放内存访问语义执行交换.
所以我很好奇这两个功能之间的区别.何时使用获取内存访问语义或释放内存访问语义?有什么例子吗?
谢谢!
这是代码.
首先我尝试malloc并释放一个大块内存,然后我malloc许多小块内存,直到它耗尽内存,我释放所有这些小块.
在那之后,我尝试malloc一个大块内存.
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
static const int K = 1024;
static const int M = 1024 * K;
static const int G = 1024 * M;
static const int BIG_MALLOC_SIZE = 1 * G;
static const int SMALL_MALLOC_SIZE = 3 * K;
static const int SMALL_MALLOC_TIMES = 1 * M;
void **small_malloc = (void **)malloc(SMALL_MALLOC_TIMES * sizeof(void *));
void *big_malloc = malloc(BIG_MALLOC_SIZE);
printf("big malloc first time %s\n", (big_malloc …Run Code Online (Sandbox Code Playgroud) 当我输入:
set hi=Hello^&World!
echo %hi%
Run Code Online (Sandbox Code Playgroud)
打印Hello并告诉我World不是命令
我想要它打印Hello&World!
这该怎么做?
我想发送分块的HTTP主体来测试我自己的HTTP服务器.所以我写了这个python代码:
import http.client
body = 'Hello World!' * 80
conn = http.client.HTTPConnection("some.domain.com")
url = "/some_path?arg=true_arg"
conn.request("POST", url, body, {"Transfer-Encoding":"chunked"})
resp = conn.getresponse()
print(resp.status, resp.reason)
Run Code Online (Sandbox Code Playgroud)
我希望HTTP请求的主体是transferrd chunked,但我使用Wireshark捕获网络包,HTTP请求的主体不会被转移.
如何通过python中的http.client lib传递分块体?