Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
C++ ABI 如何处理 RVO 和 NRVO?
我对编译器和链接器如何处理调用要求这一事实感到困惑er该功能的不同取决于该功能是否使用 RVO 还是 NRVO 这可能是我的误解 但我的假设是通常没有 RVO 或 NRVO std string s get string 如果 get st
c
ABI
rvo
nrvo
在布尔值中设置额外的位可以使其同时为 true 和 false
如果我得到一个bool变量并将其第二位设置为 1 则变量同时计算为 true 和 false 用gcc6 3编译以下代码 g选项 gcc v6 3 0 Linux RHEL6 0 2016 x86 64 bin g g main cpp o
c
Boolean
undefinedbehavior
Evaluation
ABI
我们什么时候破坏二进制兼容性
我的印象是 每当你执行以下其中一项操作时 添加新的公共虚拟方法virtual void aMethod 添加新的公共非虚拟方法void aMethod 从接口实现公共纯虚方法virtual void aMethod override 实际上
c
dll
virtualfunctions
ABI
Visual Studio C++ dll 库在 Qt 应用程序中崩溃
我在 MS Visual C DLL 库和 Qt 程序之间共享 std string 数据时遇到问题 我拥有的是 用 Visual C 2010 Express 编写的 DLL 库 导出一种方法 extern C declspec dlle
c
QT
visualc
dll
ABI
大多数现代系统中堆栈增长的方向是什么?
我正在准备一些 C 语言培训材料 我希望我的示例适合典型的堆栈模型 Linux Windows Mac OSX PPC 和 x86 Solaris 和最新的 Unix 中的 C 堆栈朝什么方向发展 堆栈增长通常并不取决于操作系统本身 而是取
Assembly
stack
callstack
ABI
stackframe
链接到使用 GCC5 编译的库时,clang 中未定义的引用
我尝试使用 libmuparser 的 ubuntu 15 10 存储库版本 包 libmuparser2v5 使用 gcc 编译工作正常 但使用 clang 则不行 我对此进行了更深入的研究 提出了以下最小 非 工作示例和一些问题 考虑一
c
C11
Clang
ABI
gcc5
什么是从虚拟基类继承的虚拟函数的“虚拟 thunk”?
当我尝试访问从虚拟基类继承的派生类对象的内存布局时 出现了问题 编程环境 GNU Linux 3 19 0 32 generic x86 64编译器 gcc 4 8 4 virtual base class class Base publi
c
g
ABI
vtable
virtualinheritance
ARM 上 TLS 的代码序列
The 线程本地存储的 ELF 处理 http www akkadia org drepper tls pdf文档给出了各种架构的各种模型 本地执行 初始执行 一般动态 的汇编序列 但 ARM 不行 有什么地方可以看到 ARM 的此类代码序
Linux
arm
ELF
ABI
threadlocalstorage
vararg 函数如何找出机器代码中的参数数量?
可变参数函数如何printf找出他们得到的论点数量 参数的数量显然没有作为 隐藏 参数传递 请参阅在这里调用 asm 示例中的 printf http www cs umbc edu portal help nasm sample shtm
Assembly
printf
callingconvention
ABI
variadic
系统V ABI的红区是如何实现的
编译器如何确保红色区域不被破坏 是否存在空间过度分配的情况 是什么因素导致选择128字节作为红色区域的大小 编译器不会 它只是利用担保的RSP 以下的空间不会异步地被破坏 例如被信号处理程序破坏 进行函数调用当然会同步破坏它 事实上 在Li
Linux
gcc
x8664
ABI
redzone
为什么 T* 可以在寄存器中传递,但 unique_ptr
却不能?
我正在观看 Chandler Carruth 在 CppCon 2019 上的演讲 不存在零成本抽象 在其中 他举了一个例子 说明他对使用std unique ptr
c
Assembly
uniqueptr
callingconvention
ABI
System V amd64 如何处理很长的返回值?
我正在简要研究 amd64 x86 64 架构的 System V ABI 并且很好奇它如何处理超过 128 位的返回值 其中rax and rdx还不够 我在 Ubuntu 18 04 64 位 更一般地说 任何 amd64 POSIX
Assembly
POSIX
returnvalue
x8664
ABI
在 C 中按值传递结构而不是传递指针有什么缺点吗?
在 C 中按值传递结构而不是传递指针有什么缺点吗 如果结构体很大 显然会存在复制大量数据的性能问题 但对于较小的结构体 它基本上应该与将多个值传递给函数相同 当用作返回值时 它可能会更有趣 C 函数只有单个返回值 但您通常需要多个返回值 因
c
struct
parameterpassing
ABI
i386 和 x86-64 上的 UNIX 和 Linux 系统调用(和用户空间函数)的调用约定是什么
以下链接解释了 UNIX BSD 风格 和 Linux 的 x86 32 系统调用约定 http www int80h org bsdasm system calls http www freebsd org doc en books de
Linux
Assembly
x8664
callingconvention
ABI
x86、x32 和 x64 架构之间的区别?
请解释一下两者的区别x86 x32 and x64 说到这里有点令人困惑x86 and x32因为大多数时候 32 位程序在 x86 上运行 Hans 和 DarkDust 的回答涵盖了 i386 i686 和 amd64 x86 64 因
x86
64bit
x8664
cpuarchitecture
ABI
为什么 Mac ABI 要求 x86-32 进行 16 字节堆栈对齐?
我可以理解旧的 PPC RISC 系统甚至 x86 64 的这种要求 但是对于旧的久经考验的 x86 呢 在这种情况下 堆栈只需在 4 字节边界上对齐 是的 一些 MMX SSE 指令需要 16 字节对齐 但如果这是被调用方的要求 那么它应
MacOS
memoryalignment
callstack
callingconvention
ABI
System V 中 x86_64 的 C 浮点值调用约定是什么?
我目前正在深入研究汇编领域 主要是从 x86 64 C 和 System V AMD64 的角度 通常针对 Linux 通过按顺序使用以下寄存器 整数 以及隐含的指针 值的调用约定非常简单 RDI RSI RDX RCX R8 R9 XMM
c
Assembly
x8664
callingconvention
ABI
将右值传递给非引用参数,为什么编译器不能删除副本?
struct Big int a 8 void foo Big a Big getStuff void test1 foo getStuff 编译 在 Linux 上使用 clang 6 0 0 for x86 64 因此 System V
c
Clang
x8664
compileroptimization
ABI
每个 CPU 架构的真正 ELF TLS ABI 要求是什么?
乌尔里希 德雷珀的论文on thread local storage 概述了几种不同 cpu 架构的 TLS ABI 但我发现它不足以作为实现 TLS 的基础 原因有两个 它省略了许多重要的体系结构 如 ARM MIPS 等 同时包括一堆完
c
Linux
ELF
ABI
threadlocalstorage
请解释一下 C++ ABI
对于不修复 C 的某些问题的常见解释是 它会破坏 ABI 并需要重新编译 但另一方面 我遇到这样的语句 老实说 这对于几乎所有 C 非 POD 类型都是如此 而不仅仅是例外 可以跨库边界使用 C 对象 但通常前提是所有代码都使用相同的工具和
c
ABI
«
1
2
3
4
»