小编Mic*_*kis的帖子

为什么C评论喜欢/**/需要'<'?

我的团队C代码指南写道,最好在注释中放置一个'<',如下所示:

#define MAX_PACK_ITEM_NUM 50  /**<  max number of item */
Run Code Online (Sandbox Code Playgroud)

我想知道,这个'<'的实际用途是什么?

c c++ doxygen

47
推荐指数
4
解决办法
2691
查看次数

如何获取输入节的大小(将其放置在内存的末尾)

我有以下链接描述文件: .data.bss放在ram中,然后一.heap节填充剩余的内存。

现在,我想添加一个.noinit始终放在内存末尾的节。因此,它会被引导加载程序等忽略。

我仍然希望我的.heap部分占据.bss和之间的所有可用空间.noinit,但是为此,我需要知道.noinit部分的大小。

天真的方法失败了:

/* .bss section which is used for uninitialized data */
.bss (NOLOAD) :
{
    . = ALIGN(4);
    _sbss = . ;
    _szero = .;
    *(.bss .bss.*)
    *(COMMON)
    . = ALIGN(4);
    _ebss = . ;
    _ezero = .;
} > ram

/* heap section */
.heap (NOLOAD) :
{
    . = ALIGN(4);
    _sheap = . ;
    . = ORIGIN(ram) + LENGTH(ram) …
Run Code Online (Sandbox Code Playgroud)

ld

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

符合Visual C++标准

我想知道Microsoft的Visual C++编译器是否以及在何种程度上符合当前的C(C90/C99)和C++(ISO/IEC 14882:2003)标准.不幸的是,我只能找到关于这个主题的部分信息,我可能会看到所有错误的地方.

任何指向相关资源的指针都非常感谢.提前致谢.

编辑:因为看起来这是一个最敏感的主题,我会满足于是否MSVC完全符合C90的是/否答案...我已经明白,这不是C99的情况(自然而然,我仍然不知道C++ ..

Edit2:感谢大家的回答.我已经接受了Rushakov先生的回答,但对所有相关答案都提出了异议,这些答案都很有帮助.

c standards visual-studio

14
推荐指数
2
解决办法
4950
查看次数

GNU STL字符串:这里是否包含copy-on-write?

(免责声明:我不知道C++标准对此有何看法......我知道,我很可怕)

在非常大的字符串上操作时,我注意到std :: string正在使用copy-on-write.我设法编写了可以重现观察到的行为的最小循环,例如,下面的循环运行得非常快:

#include <string>
using std::string;
int main(void) {
    string basestr(1024 * 1024 * 10, 'A');
    for (int i = 0; i < 100; i++) {
        string a_copy = basestr;
    }
}
Run Code Online (Sandbox Code Playgroud)

当在循环体中添加写入时a_copy[1] = 'B';,显然发生了实际复制,程序以0.3s而不是几毫秒运行.100次写入减慢了大约100次.

但后来很奇怪.我的一些字符串没有被写入,只是从中读取,而这并没有反映在执行时间中,这几乎与字符串上的操作数成正比.通过一些挖掘,我发现只是从字符串读取仍然给我性能命中,所以它让我假设GNU STL字符串正在使用copy-on-read(?).

#include <string>
using std::string;
int main(void) {
    string basestr(1024 * 1024 * 10, 'A');
    for (int i = 0; i < 100; i++) {
        string a_copy = basestr;
        a_copy[99]; // this also ran in 0.3s!
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的发现中陶醉了一段时间之后,我发现从基础字符串中读取(带有operator [])对于整个玩具程序来说也需要0.3秒.我对此并不是100%舒服.STL字符串是否确实是可读写的,或者它们是否允许写入时复制?我被认为operator …

c++ string g++ internals

14
推荐指数
2
解决办法
3248
查看次数

Linux内核定时器函数在什么上下文中运行?

当使用add_timerAPI 创建的计时器到期并且计时器结构分配的功能运行时,它在什么上下文中运行?它是中断上下文还是某些内核进程上下文?

kernel timer linux-kernel

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

好的mysql查询可以在单个列中查找类似的值

我有重复的条目非常相似,但不完全相同.这里有些例子:

- 2016: Obama's America
- 2016: Obama's America (VF)

- Hurt Locker
- The Hurt Locker
Run Code Online (Sandbox Code Playgroud)

什么是我可以用来获得潜在相似的查询titles

更新:请注意,我不是要删除EXACT重复项.我只想在一列中选择类似的值.

mysql sql similarity

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

为什么可以在O(n)时间内计算KMP故障函数?

维基百科声称可以在O(n)时间内计算失败函数表.

让我们看看它的"规范"实现(在C++中):

vector<int> prefix_function (string s) {
    int n = (int) s.length();
    vector<int> pi (n);
    for (int i=1; i<n; ++i) {
        int j = pi[i-1];
        while (j > 0 && s[i] != s[j])
            j = pi[j-1];
        if (s[i] == s[j])  ++j;
        pi[i] = j;
    }
    return pi;
}
Run Code Online (Sandbox Code Playgroud)

为什么它在O(n)时间内工作,即使存在内部while循环?我对算法的分析并不是很强,所以有人可以解释一下吗?

c++ algorithm knuth-morris-pratt

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

BufRead和BufEnter有什么区别?

我很困惑这两个事件BufReadBufEnter.他们之间有什么区别?

我将选择一个而不是另一个的一些示例场景将非常有帮助.

vim

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

在运行时获取进程的输出

我正在使用python脚本运行进程subprocess.Popen,同时将输出存储在文本文件中,并在控制台上打印.这是我的代码:

result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in result.stdout.readlines(): #read and store result in log file
    openfile.write("%s\n" %line)
    print("%s" %line)
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但它的作用是首先完成该过程并将输出存储在结果变量中.之后for循环存储输出并打印它.

但我希望在运行时输出(因为我的过程可能需要数小时才能完成,所有这些时间都没有得到任何输出).

那么有没有任何其他函数可以动态地(在运行时)给我输出,意味着只要进程给出第一行,就应该打印出来.

python subprocess python-3.x

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

从命令行启动 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
查看次数