小编Mic*_*kis的帖子

从命令行启动 vim-fugitive

我真的很喜欢 Fugitive(VIM git 包装插件)但是我想创建一个启动 vim 然后运行的脚本

:Gstatus 
Run Code Online (Sandbox Code Playgroud)

立即地。但是当我尝试

vim -c Gstatus
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,指出Gstatus 不是编辑器命令

git vim vim-fugitive

8
推荐指数
2
解决办法
966
查看次数

哪些寄存器在函数中可以安全使用(x86)

根据维基百科,英特尔ABI允许使用EAX,ECXEDX不是在功能中保留它们.
我不确定"Intel ABI"是什么意思.这是否意味着所有针对Intel CPU的编译器都强制执行/遵循它?我正在编写一个将从C代码调用的汇编函数.我可以为所有编译器假设这个吗?(我x86目前只针对目标)

x86 assembly abi

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

Python有限自动机库

什么是Python最完整的有限自动机库,它能够执行基本操作,例如:

  • 最小化,
  • 非确定性有限自动机的确定
  • 这些自动机等生成的语言的联合,交集和产品等.

我找到的所有库都不完整或者不是即插即用的.

python finite-automata

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

有人可以解释多态性的好处吗?

所以我几乎了解它是如何工作的,但我无法理解它是什么使它有用.您仍然必须定义所有单独的函数,您仍然必须创建每个对象的实例,所以为什么不从该对象调用该函数与创建对象,创建指向父对象的指针并传递派生对象引用,只是为了调用一个函数?我不明白采取这一额外步骤的好处.

为什么这样:

class Parent
{
    virtual void function(){};
};

class Derived : public Parent
{
    void function()
    {
    cout << "derived";
    }
};

int main()
{
    Derived foo;
    Parent* bar = &foo;
    bar->function();
    return -3234324;
}
Run Code Online (Sandbox Code Playgroud)

对此:

class Parent
{
    virtual void function(){};
};

class Derived : public Parent
{
    void function()
    {
    cout << "derived";
    }
};

int main()
{
    Derived foo;
    foo.function();
    return -3234324;
}
Run Code Online (Sandbox Code Playgroud)

他们做的完全一样吗?据我所知,只有一个人使用更多的记忆和更多的混乱.

c++ polymorphism

7
推荐指数
2
解决办法
2万
查看次数

linux/list.h - 如何安全地从列表中删除项目?

在评论中linux/list.h写道:

  1. 使用时list_del_entry: 注意:list_empty在此之后输入时不返回true,该条目处于未定义状态.
  2. 对于list_del:这仅适用于内部列表操作,我们已经知道上一个/下一个条目!

那么,我如何安全地从链表中删除一个对象并确保它list_empty是有效的还是确保下一个链表节点删除是正确的?

这是我目前的实施:

struct kool_list{
    int to;
    struct list_head list;
    int from;
};

struct kool_list *tmp;
struct list_head *pos, *q;
struct kool_list mylist;

list_for_each_safe(pos, q, &mylist.list){
         tmp= list_entry(pos, struct kool_list, list);
         printf("freeing item to= %d from= %d\n", tmp->to, tmp->from);
         list_del(pos);
         free(tmp);
}
Run Code Online (Sandbox Code Playgroud)

c list linux-kernel

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

快速乘法模2 ^ 16 + 1

IDEA密码使用乘法模数2^16 + 1.是否有算法在没有通用模运算符的情况下执行此操作(仅模数2^16(截断))?在IDEA的上下文中,零被解释为2^16(它表示零不是我们乘法的参数,它不能是结果,因此我们可以保存一位并将值存储2^16为位模式0000000000000000).我想知道如何在不使用标准模运算符的情况下有效地实现它(或者是否有可能).

c cryptography algebra modulus

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

发送固定长度的TCP帧

我需要使用TCP通过具有固定非标准MTU(例如,1560)的子网发送一些数据.如果帧的长度小于MTU,则通过该子网传输的所有以太网帧应手动填充0.

因此,数据大小应为(1560 - sizeof(IP标头) - sizeof(TCP标头)).

这就是我要这样做的方式:

  1. 我设置TCP_CORK选项以减少数据的分段.它不可靠,因为有200毫秒的天花板,但它的工作原理.

  2. 我知道IP头的大小(20字节),因此数据长度应该等于(1540 - sizeof(TCP头)).

  3. 那就是问题所在.我不知道TCP头大小.它的"选项"字段的大小是浮动的.

所以,问题是:如何获得TCP头的大小?或者也许有一些方法来发送带有固定长度标头的TCP帧?

c linux network-programming tcp mtu

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

是否必须释放std :: string.c_str()或std :: string.data()返回的指针?

据我所知,std::string当你调用c_str()/ data()方法时会创建一个内容的ident数组副本(使用/ out终止NUL-char,这里没关系).无论如何,该对象是否也负责释放这个阵列或者我必须这样做?

简而言之:

std::string hello("content");

const char* Ptr = hello.c_str();

// use it....

delete[] Ptr;   //// really ???
Run Code Online (Sandbox Code Playgroud)

我只是想在内存分配方面保持安全.

c++ string memory-management

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

__func__标识符如何成为安全风险?

我在评论中看到使用__func__是一种安全风险.我需要了解情况如何?

c security macros

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

无法理解dp解决方案

问题如下:

Lazer Tag由一个小组游戏组成,在整个游戏中你被分配了固定数量的子弹(通常称为激光射击).每个右手射击你的目标敌人,给你一分.

考虑一系列的命中和未命中,它们可以用"x"和"o"的形式表示,其中"o"表示命中,"x"表示未命中.假设该系列的形式为"xxxoooxxxxooxxo",则您的最终得分将等于即将3^2 + 2^2 +1^2整个游戏中每个最大连续命中数的平方加起来.

正确击中第j次击球的概率(1≤j≤n)是P(j).简单来说,在第j个转弯处获得系列中"o"的概率是P(j).您需要在回合结束时计算预期得分.

我可以使用memoization理解这个O(n ^ 2)解决方案,但问题需要O(n)解决方案.我见过O(n)解决方案,但我无法理解.O(n)解决方案如下:

for(i = 1; i <= n; i++)
    dp[i] = (dp[i-1] + p[i-1]) * p[i];   
for(i = 1; i <= n; i++)
    ans+=2 * dp[i] + p[i];
Run Code Online (Sandbox Code Playgroud)

其中p [i]是击中第i个目标的概率.谁能解释O(n)解决方案是如何工作的?

algorithm dynamic-programming

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