Tag: cpu寄存器

是否可以在32位处理器的机器中运行64位代码?

我已经四处寻找这些问题的答案。 但运气不大。 是否可以在具有64-bit processor的计算机中运行32-bit代码? 答案似乎是肯定的。 但是在性能问题上存在争议,因为处理器上没有使用32-bits 。 现在我的问题反之亦然,是否可以在具有32-bit处理器的机器中运行64-bit代码? 从我的小理解,答案是否定的,因为设计为64-bit运行的代码将使用64-process registars但32-bit机器只提供32。 另一方面,我找到了这个链接 。 据此,可以在32位机器上编译64位代码。 但我不知道如何做到这一点加上如果在32-bit机器上进行编译也能保证在同一台机器上execution 。 谢谢你的帮助

如何知道二进制整数是否代表负数?

我正在读一些C文本。 在“否定”和“正值”会话中,作者提到了以二进制forms表示负数的几种方法。 我一直都明白,并且想知道如果用二进制数,我们可以确定它是否为负数? 例如,-92具有8位二进制forms: 10100100 。 但是,如果给出10100100 ,我们可以说是-92,而不是其他非负数吗?

在主要C / C ++编译器生成的代码中注册分配规则

我记得一段时间以前的一些规则(32位以前的英特尔处理器),当时很频繁(至少对我而言)必须分析C / C ++编译器生成的汇编输出(在我看来,当时是Borland / Turbo)找到性能瓶颈,并安全地将程序集例程与C / C ++代码混合。 比如将SI寄存器用于this指针,AX用于返回值,当汇编例程返回时应保留哪些寄存器等。 现在我想知道是否有更多流行的C / C ++编译器(Visual C ++,GCC,Intel ……)和处理器(Intel,ARM,…)的参考,如果没有,在哪里找到要创建的部分一。 想法?

如何强制在C中强制使用未被优化的未使用内存?

微控制器通常需要读取寄存器以清除某些状态条件。 在C中是否有可移植的方式来确保如果不使用数据则不会优化读取? 指向内存映射寄存器的指针是否足以声明为volatile? 换句话说,以下是否始终适用于标准兼容编译器? void func(void) { volatile unsigned int *REGISTER = (volatile unsigned int *) 0x12345678; *REGISTER; } 我知道处理这样的function会遇到编译器相关的问题。 所以,在这种情况下,我对便携式设备的定义有点松散。 我只是说它会尽可能广泛地使用最流行的工具链。

CPU TSC提取操作,尤其是在多核多处理器环境中

在Linux世界中,要获得纳秒精度定时器/时钟提示,可以使用: #include int foo() { timespec ts; clock_gettime(CLOCK_REALTIME, &ts); //–snip– } 这个答案提出了一种使用RDTSC指令直接查询cpu时钟的asm方法。 在多核,多处理器架构中,如何在多个内核/处理器之间同步此时钟滴答/定时器值? 我的理解是,在固有的围栏中完成了。 这种理解是否正确? 你能否提出一些可以详细解释这个问题的文件? 我对Intel Nehalem和Sandy Bridge微体系结构感兴趣。 编辑 将进程限制为单个核心或cpu不是一种选择,因为该进程非常庞大(就消耗的资源而言)并且希望最佳地利用包含所有核心和处理器的机器中的所有资源。 编辑 感谢您确认TSC在核心和处理器之间同步。 但我最初的问题是这种同步是如何完成的? 它是否带有某种围栏? 你知道任何公共文件吗? 结论 感谢所有输入:以下是此讨论的结论:TSC在初始化时使用在多处理器/多核系统中的核心和处理器之间发生的RESET进行同步。 之后,每个Core都是独立的。 TSC保持不变,具有锁相环,可以规范频率变化,从而规范给定内核中的时钟变化,这就是TSC在内核和处理器之间保持同步的方式。