我正在努力提高解析器的速度.并且switch-case
,有时它很有用,但我发现它仍然很慢.不确定 - 如果C++支持此功能(地址检查点(带附加参数)),那就太棒了!
简单的例子:
enum Transport //MOTORBIKE = 1, CAR = 2, ... SHIP = 10
Transport foo = //unknown
switch(foo)
{
case MOTORBIKE : /*do something*/ break;
case CAR : /*do something*/ break;
//////////////////////////
case SHIP : /*do something*/ break;
}
Run Code Online (Sandbox Code Playgroud)
如果变量foo
是SHIP
,至少程序必须重新检查该值最多十次! - >它仍然很慢.
如果C++支持检查点:
Transport foo = //unknown
__checkpoint smart_switch;
goto (smart_switch + foo); //instant call!!!
smart_switch + MOTORBIKE : /*do something*/ goto __end;
smart_switch + CAR : /*do …
Run Code Online (Sandbox Code Playgroud) 我希望能够访问传递给我的方法的变量.我知道C可能有某种方式将某个地址作为参数传递,然后将其称为指针并能够使用该变量.无论如何,这是一个例子.
void myFunction(address to variable) {
*variable = "example";
}
Run Code Online (Sandbox Code Playgroud)
然后将其称为:
myFunction(&somevariable);
Run Code Online (Sandbox Code Playgroud) 以下是什么意思?
class Something
{
public:
int m_nValue;
const int& GetValue() const { return m_nValue; }
int& GetValue() { return m_nValue; }
};
Run Code Online (Sandbox Code Playgroud)
此代码取自此处.
我有这两种类型:
type Routing map[string]Handler
type Handler interface {
Handle()
}
Run Code Online (Sandbox Code Playgroud)
我有一个MyHandler
满足接口的类型,它看起来像这样:
type MyHandler struct {
}
func (this *MyHandler) Handle() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
// routes is created at the beginning of the program and available
// throughout the lifetime of the script
routes := Routing {
"/route/here": MyHandler,
})
// ...
// and in another method, this line may be executed several times:
new(routes["/route/here"]).Handle()
Run Code Online (Sandbox Code Playgroud)
我在最后一行收到此错误:
routes ["/ route/here"]不是类型
当我将最后一行更改为
routes["/route/here"].Handle()
Run Code Online (Sandbox Code Playgroud)
它显然有效.但是,它只使用Handler的一个实例...我希望每次执行最后一行时都有一个新实例.如何在Handler
每次执行最后一行时实例化一个新实例?
(我假设在使用时new
,旧的将在使用后进行垃圾收集.请注意,我没有保存我创建的实例;我只关心调用该 …
使用在Lua支持下编译的nginx,我们如何对FastCGI处理程序进行某种子请求,就像nginx的fastcgi_pass
指令一样?
我想做的是这样的:
location = / {
access_by_lua '
res = ngx_fastcgi.pass("backend")
';
}
Run Code Online (Sandbox Code Playgroud)
(显然,这是行不通的。)
我在HttpLuaModule上浇注,我看到提到了ngx_fastcgi
和ngx.location.capture
,这显然使
对配置了磁盘文件目录或其他任何Nginx C模块(例如... ngx_fastcgi,...)的其他位置的非阻塞内部请求
但是随后跟随的链接ngx_fastcgi
将我带到HttpFastcgiModule,它仅说明nginx指令,而不说明Lua可编写脚本的命令。是否ngx.location.capture
使用正确的功能?(顺便说一下,这些请求将是到达localhost
另一个端口,例如9000或9001。)
如何在nginx中使用Lua将请求转发或进行子请求到FastCGI端点?
在C中,我们可以在变量前放置"&"来计算出该变量的地址.我有一台32位机器.每当我在控制台中打印地址时,控制台都会显示一个7位数的基数10.我只是想知道这个数字(10 ^ 7)与32位机器有什么关系.(2 ^ 32)谢谢
我有一个地址的例子:0x003533,它是一个字符串,但要使用它我需要它是一个很长但我不知道该怎么做:S有任何人的解决方案吗?
所以字符串:"0x003533"到长0x003533 ??
我正在尝试学习C指针,但我无法理解某些东西......以下代码:
#include <stdio.h>
void foo(int *x, int *y);
void foo(int *x, int *y) {
printf("x = %p\ny = %p\n", &x, &y);
*x = 5;
*y = 6;
}
int main(void) {
int a, b;
printf("a = %p\nb = %p\n", &a, &b);
foo(&a, &b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么地址不同?第一个printf
(主)输出两个地址.另一个printf
(foo)输出不同的地址.我将地址传递给foo(&operator).
8086的地址总线为20位宽.这意味着它可以在RAM中寻址1048576个不同的地址.自从最大 8086可以处理的内存为1 MiB,单个内存单元可以存储1个字节.
因此像0xffff0这样的随机逻辑地址具有8位或1字节的"存储".
现代Core i7有一个36位的地址总线,这意味着他可以寻址68719476736不同的地址.每个逻辑地址一个字节,他可以处理68719476736字节或64 GiB,这正是最大值.内存Core i7可以处理.
这个解释是否正确,我认为对吗?
所以自30年以来最大 逻辑内存地址的存储正好是1个字节.
我正在使用C.我正在尝试做的是一个函数,它将返回一个包含指向对象的地址的int.然后,使用我收到的int(包含地址),并构建一个指向该地址的指针.
示例:
MyClass* obj = SomeMethodReturningAPointerOfMyClass();
int address = (int) &obj;
return address;
Run Code Online (Sandbox Code Playgroud)
我认为它适用于这一部分.我得到的值是-4197276.(也许我完全错了?)
然后,另一方面,我想做的事情如下:
MyClass* obj = (MyClass*) address;
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我无法访问任何obj方法而不会收到错误.
我找到了一种方法:
MyClass* obj = SomeMethodReturningAPointerOfMyClass();
machine->registers[2] = (int)obj;
Run Code Online (Sandbox Code Playgroud)
然后,在我收到整数的另一种方法中:
MyClass* obj = (MyClass*)address;
Run Code Online (Sandbox Code Playgroud)
我可以完美地完成对象!可能不是那么干净但它应该为它的用途做好工作!
感谢所有花时间回答的人!