在32位模式编程中,我习惯int 3在我的程序中使用调试器在指定位置停止(将指令嵌入源中).现在64位似乎不起作用,在gdb下生成一个非常普通的SIGSEGV并且破坏程序超出希望("程序终止于信号SIGSEGV,分段错误.程序不再存在.").我想知道64位模式是否有另一种机制,或者我是否应该做一些缓存 - 刷新(int 3在这种情况下是动态生成的操作码(0xcc),是一些类似jit的代码).
强烈建议在创建64位内核(对于x86_64平台)时,指示编译器不要使用用户空间ABI所执行的128字节红区.(对于GCC,编译器标志是-mno-red-zone).
如果启用了内核,则内核不会是中断安全的.
但那是为什么呢?
我正在hacks.mozilla.org上阅读64位Firefox版本的博客.
作者说:
对于
asm.js代码,增加的地址空间还允许我们使用硬件内存保护来安全地从asm.js堆访问中删除边界检查.收益非常显着:asmjs-apps上的8%-17%- * - arewefastyet.com上报告的吞吐量测试.
我试图了解64位硬件如何对C/C++进行自动边界检查(假设编译器支持硬件).我在SO中找不到任何答案.我找到了一篇关于这个主题的技术论文,但我无法理解这是怎么做到的.
有人可以在边界检查中解释64位硬件辅助吗?
我遇到的问题与此处描述的类似,但略有不同(加载程序集及其依赖项).
我有一个用于3D渲染的C++ DLL,这是我们向客户销售的产品.对于.NET用户,我们将有一个CLR包装器.C++ DLL可以在32位和64位版本中构建,但我认为这意味着我们需要有两个CLR包装器,因为CLR绑定到特定的DLL?
现在假设我们的客户有一个可以是32位或64位的.NET应用程序,并且它是一个纯粹的.NET应用程序,它让CLR从一组程序集中解决它.问题是应用程序代码如何在运行时动态选择我们的32位和64位CLR/DLL组合?
更具体地说,这里也适用于上述问题的建议答案(即创建一个ResolveEvent处理程序)?
在Linux中访问线程局部变量的速度有多快.从gcc编译器生成的代码中,我可以看到它是使用fs段寄存器.显然,访问线程局部变量不应该花费额外的周期.
但是,我继续阅读有关线程局部变量访问缓慢的恐怖故事.怎么会?当然,有时不同的编译器使用与使用fs段寄存器不同的方法,但是通过fs段寄存器访问线程局部变量也很慢?
在多核x86机器上,假设在core1上执行的线程增加一个整数变量a,同时核心2上的线程也增加它.鉴于初始值为a0,它是否总是2在最后?或者它可能有其他价值?假设a声明为volatile并且我们没有使用原子变量(例如C++的atomic <>和gcc中的原子操作).
如果a在这种情况下,值确实总是2,那是否意味着long intx86-64 中的a 也具有相同的属性,即a最终总是2?
我正在编写一个C代码,用于测量获取信号量所需的时钟周期数.我正在使用rdtsc,在对信号量进行测量之前,我连续两次调用rdtsc来测量开销.我在for循环中重复了这么多次,然后我将平均值用作rdtsc开销.
这是正确的,首先要使用平均值吗?
尽管如此,这里的一个大问题是,有时我会得到开销的负值(不一定是平均值,但至少是for循环中的部分值).
这也影响了连续计算sem_wait()操作所需的cpu周期数,有时也证明是负数.如果我写的不清楚,这里有一部分我正在编写的代码.
为什么我会得到这样的负值?
(编者注:请参阅获取CPU周期计数?以获得完整的64位时间戳的正确和可移植方式."=A"编译为x86-64时,asm约束只能得到低或高32位,具体取决于寄存器分配是否发生为uint64_t输出选择RAX或RDX .它不会选择edx:eax.)
(编辑的第二个注释:哎呀,这就是为什么我们得到负面结果的答案.仍然值得留下一个注释作为警告,不要复制这个rdtsc实现.)
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
static inline uint64_t get_cycles()
{
uint64_t t;
// editor's note: "=A" is unsafe for this in x86-64
__asm volatile ("rdtsc" : "=A"(t));
return t;
}
int num_measures = 10;
int main ()
{
int i, value, res1, res2;
uint64_t c1, c2;
int tsccost, tot, a;
tot=0;
for(i=0; i<num_measures; i++)
{ …Run Code Online (Sandbox Code Playgroud) 这可能不是问这个问题的合适的地方,但我还是会试一试......我买了Visual Studio 2015 Professional,出于某种原因,当我按照下载链接时它只给了我下载32bit的选项.exe或32bit.iso,我想要一个64位版本.然后我登录到visualstudioonline并从那里下载了ISO,但仍然没有选择是否需要32位版本或64位版本.是的,我的笔记本电脑是64位,我正在运行的Windows 10操作系统也是如此.我打电话给微软,花了一个光荣的4个小时在世界各地转移了15次,并且不得不重复自己15次才被转移,但无济于事.
那么有谁能告诉我在哪里可以获得64位版本的VisualStudio 2015?
谢谢
要清除所有位,您经常会看到一个独占或在XOR eax, eax.反过来也有这样的伎俩吗?
我能想到的是用额外的指令反转零.