794得票17回答
什么是应用程序二进制接口(ABI)?

我从未清楚地理解什么是ABI。请不要指向维基百科文章。如果我能理解它,我就不会在这里发布如此冗长的帖子了。 这是我对不同接口的看法: 电视遥控器是用户和电视之间的接口。它是一个现有实体,但本身无用(不提供任何功能)。遥控器上每个按钮的所有功能都在电视机中实现。 接口:它是位于“功能”和该...

571得票6回答
C++标准允许未初始化的布尔值导致程序崩溃吗?

我知道在C++中的{{未定义行为}}可以让编译器做任何它想做的事情。然而,我遇到了一个崩溃问题,这让我感到惊讶,因为我认为代码足够安全。 在这种情况下,真正的问题只发生在使用特定编译器的特定平台上,并且仅在启用优化时才会出现。 我尝试了几种方法来复制问题并将其简化到最大程度。这里有一个名为...

293得票12回答
API和ABI的区别

我是Linux系统编程的新手,阅读《Linux系统编程》时遇到了API和ABI。 API的定义: API定义了软件之间在源代码级别上通信的接口。 ABI的定义: 而API定义了源接口,ABI定义了特定架构下两个或多个软件之间的低级二进制接口。它定义了应用程序如何相互交互、应用程序如何与内...

213得票13回答
为什么布尔值的大小是1个字节而不是1个位?

在C++中, 为什么布尔类型大小是1字节而不只有1位? 为什么没有4位或2位整型这样的数据类型? 当我编写CPU模拟器时,我忽略了上述内容。

198得票4回答
UNIX和Linux系统调用(以及用户空间函数)在i386和x86-64上的调用约定是什么?

以下链接介绍了UNIX(BSD风格)和Linux上的x86-32系统调用约定: http://www.int80h.org/bsdasm/#system-calls http://www.freebsd.org/doc/en/books/developers-handbook/x86-sy...

191得票11回答
在C语言中,通过值传递结构体与通过指针传递结构体相比,有什么缺点吗?

在C语言中,通过值传递结构体会有什么缺点吗?如果结构体很大,那么显然会涉及到复制大量数据的性能问题,但对于较小的结构体,这与将多个值传递给函数基本相同。当其作为返回值时,甚至更有趣。C语言只有单一的返回值,但通常需要多个返回值,因此一个简单的解决方案是将它们放入结构体中并返回。是否有任何支持或...

157得票3回答
连接C++17、C++14和C++11对象是否安全?

假设我有三个编译对象,它们都是由同一编译器/版本编译生成的: A 使用C++11标准编译 B 使用C++14标准编译 C 使用C++17标准编译 为简单起见,让我们假设所有头文件都是用C++11编写的,仅使用在三个标准版本之间语义未发生变化的构造,因此任何相互依赖关系都已正确地通过头文...

137得票4回答
为什么Windows64在x86-64架构中使用不同的调用约定?

AMD有一份ABI规范,描述了在x86-64上使用的调用约定。除了Windows使用自己的x86-64调用约定外,所有操作系统都遵循它。为什么? 有人知道这种差异的技术、历史或政治原因吗?还是纯粹是因为NIH综合症? 我明白不同的操作系统可能需要更高级的东西,但这并不能解释为什么例如Win...

126得票4回答
如何安全地在动态链接库中传递对象,特别是STL对象?

如何传递类对象,特别是STL对象到C++ DLL并从DLL返回? 我的应用程序必须与以DLL文件形式存在的第三方插件交互,我无法控制这些插件使用的编译器。我知道STL对象没有保证的ABI,并且我担心会导致我的应用程序不稳定。

126得票8回答
"argv[0] = name-of-executable"是一种被广泛接受的标准还是只是一种常见的约定?

当在C或C++应用程序中传递参数给main()时,argv[0]是否总是可执行文件的名称?还是这只是一种常见的约定,不能保证100%的准确性?