小编Geo*_*xon的帖子

是'int main;' 一个有效的C/C++程序?

我问,因为我的编译器似乎这么认为,即使我没有.

echo 'int main;' | cc -x c - -Wall
echo 'int main;' | c++ -x c++ - -Wall

Clang没有发出任何警告或错误,gcc只发出温和的警告:'main' is usually a function [-Wmain]但是只有在编译为C时才指定.指定a -std=似乎并不重要.

否则,它编译和链接很好.但在执行时,它立即终止SIGBUS(对我来说).

阅读(C)和C++中main()返回的(优秀)答案和快速的grep通过语言规范,这肯定会似乎对我来说,一个主要的功能是必需的.但是gcc -Wmain('main' 通常是一个函数)的冗语(以及这里的错误缺失)似乎可能暗示其他情况.

但为什么?是否有一些奇怪的边缘案例或"历史"用途?谁知道什么给了?

我想,我的观点是,我认为这应该是托管环境中的错误,是吗?

c c++ program-entry-point function entry-point

111
推荐指数
6
解决办法
9669
查看次数

如何在zlib CRC32中正确使用无进位乘法组件(PCLMULQDQ)?

我最近一直在使用CloudFlare优化的zlib,结果非常令人印象深刻.

不幸的是,他们似乎已经假设zlib的开发被放弃了,他们的分叉也就此消失了.我最终能够手动将他们的更改改为当前的zlib开发分支,尽管这是一个真正的痛苦.

无论如何,我还没有能够利用CloudFlare代码中的一个主要优化,即使用新的(Haswell和后来的,我相信)英特尔处理器中包含的PCLMULQDQ无进位乘法指令实现快速CRC32代码,因为:

  1. 我在Mac上,并没有clang集成汇编程序或Apple的古代GAS都不了解所用的新GAS助记符,以及

  2. 代码从Linux内核中取出并且是GPL2,这使得整个库GPL2,从而基本上使它对我的目的无用.

所以我做了一些狩猎,几个小时之后我偶然发现了一些Apple在他们的bzip2中使用的代码:arm64x86_64的手写,矢量化CRC32实现.

奇怪的是,x86_64程序集的注释(仅)在arm64源代码中,但它似乎表明此代码可以与zlib一起使用:

This function SHOULD NOT be called directly. It should be called in a wrapper
function (such as crc32_little in crc32.c) that 1st align an input buffer to 16-byte (update crc along the way),
and make sure that len is at least 16 and SHOULD be a multiple of 16.
Run Code Online (Sandbox Code Playgroud)

但不幸的是,经过几次尝试,此时我似乎有点过头了.而且我不确定如何真正做到这一点.所以我希望有人能告诉我如何/在哪里调用所提供的功能.

(如果有一种方法可以在运行时检测到必要的功能,并且如果硬件功能不可用则可以回退到软件实现,这也是很棒的,所以我不必分发多个二进制文件. ,至少,如果有人可以帮助我了解如何让库正确使用基于Apple PCLMULQDQ的CRC32,那么无论如何都会有很长的路要走.)

c assembly crc32 zlib mathematical-optimization

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

bash中`set -o`选项的预期有效排序是什么?`histexpand`是否特朗普`posix`?

几个小时前我试图回答一个问题,我认为这个问题在bash POSIX模式中显示出一个有点模糊的错误.我匆匆忙忙告诉我不是这样.这个矛盾的答案,明确地说这不是一个错误,被选为正确的答案.

所以我一直在梳理bash文档,我仍然会得到非常相同的印象,所以我想我应该问.

我的(涉嫌)错误:

set -o histexpand (这通常是隐含的)
set -o posix
echo "#!/"

应该,好吧,回声#!/.(它在任何其他shell中都有).但是在bash中,它会打印到标准输出

!/: event not found

然后返回0.

所以在我看来,bash隐含set -o histexpand在极少数情况下违反了POSIX标准,并没有让位set -o posix.

set -o posix读取文档:

Change the behavior of Bash where the default operation differs from the POSIX standard ... This is intended to make Bash behave as a strict superset of that standard.

而且我一直认为这意味着这个选项set在它们相互矛盾时应该取代其他选项?这似乎也不是48个列举的差异之一.

这不是这种情况吗?我错过了什么?

bash standards posix set sh

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

libxml2 vs expat用于XMPP服务器

我正试图在Go中从头开始创建一个XMPP库(以及后来的服务器)(尽管语言本身是无关紧要的),作为一种学习XMPP协议和服务器软件开发的方法.

正如你们许多人所知,XMPP是基于XML的消息传递协议,它依赖于大量短而频繁的XML流.我认为对于这样的应用程序,基于事件的XML解析器应该更好,因为我不需要DOM和所有这些(如果我错了,请纠正我).请记住,此库适用于服务器,因此可能会同时运行多个实例;

对于该用例libxml2或expat,两者中哪一个具有更好的性能和内存使用?

c xmpp go libxml2 expat-parser

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