小编sta*_*lue的帖子

使用xor reg,reg是否优于mov reg,0?

在x86上有两种众所周知的方法可以将整数寄存器设置为零值.

mov reg, 0
Run Code Online (Sandbox Code Playgroud)

要么

xor reg, reg
Run Code Online (Sandbox Code Playgroud)

有一种观点认为第二种变体更好,因为值0没有存储在代码中并且节省了几个字节的生成的机器代码.这绝对是好的 - 使用较少的指令缓存,这有时可以实现更快的代码执行.许多编译器生成这样的代码.

然而,在xor指令和改变相同寄存器的早期指令之间正式存在指令间依赖性.由于存在依赖性,后一条指令需要等到前者完成,这可能会减少处理器单元的负载并损害性能.

add reg, 17
;do something else with reg here
xor reg, reg
Run Code Online (Sandbox Code Playgroud)

很明显,无论初始寄存器值如何,xor的结果都将完全相同.但是处理器能够识别出这个吗?

我在VC++ 7中尝试了以下测试:

const int Count = 10 * 1000 * 1000 * 1000;
int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    DWORD start = GetTickCount();
    for( i = 0; i < Count ; i++ ) {
        __asm {
            mov eax, 10
            xor eax, eax
        };
    }
    DWORD diff = GetTickCount() - start;
    start = …
Run Code Online (Sandbox Code Playgroud)

x86 assembly micro-optimization

48
推荐指数
4
解决办法
1万
查看次数

C和汇编程序实际编译的是什么?

所以我发现C(++)程序实际上并没有编译成简单的"二进制"(我可能在这里遇到了一些问题,在这种情况下我很抱歉:D)但是对于一系列事物(符号表) ,os相关的东西,...)但......

  • 汇编程序"编译"到纯二进制文件?这意味着除了预定义的字符串等资源之外没有额外的东

  • 如果C编译成除了普通二进制文件以外的其他内容,那么小型汇编程序引导程序如何只是将指令从HDD复制到内存并执行它们?我的意思是,如果操作系统内核(可能用C语言编写)编译成不同于普通二进制文件的东西 - 引导加载程序如何处理它?

编辑:我知道汇编程序没有"编译",因为它只有你的机器的指令集 - 我没有找到汇编程序"汇编"的好词.如果你有一个,请留在这里作为评论,我会改变它.

c c++ compiler-construction assembly linker

47
推荐指数
4
解决办法
2万
查看次数

实体属性值(EAV)的替代方案?

我们的数据库是基于EAV(实体 - 属性 - 值)模型设计的.那些使用EAV模型的人知道为了灵活性而附带的所有垃圾.

我向我的客户询问了使用EAV模型的原因(灵活性),他们的反应是:他们的实体随着时间而变化.因此,今天他们可能有一个具有一些属性的表,但在一个月的时间内,可能会添加一些新属性,或者可能会重命名现有属性.他们需要生成报告以回到任何阶段,并根据该阶段的实体形状查询数据.

我理解这对于传统的关系模型是不可行的,但我个人认为EAV是反模式的.是否有其他替代模型使我们能够捕获实体和实例更改的时间维度?

干杯,莫什

database database-design data-modeling entity-attribute-value data-structures

47
推荐指数
3
解决办法
2万
查看次数

什么MOV EAX,DWORD PTR DS:[ESI]意味着什么呢?

好吧所以我在我的装配中有这条线

MOV EAX, DWORD PTR DS:[ESI]
Run Code Online (Sandbox Code Playgroud)

ESI是00402050(ascii,"123456789012")

在这个指示之后: EAX = 34333231

这里到底发生了什么?这个值是如何计算的,为什么?
我在哪里可以得到一些关于这类事情的好参考?

x86 assembly

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

如何判断.NET程序集是否动态?

当迭代一组程序集(例如AppDomain.CurrentDomain.GetAssemblies())时,如果您尝试访问CodeBase等属性,动态程序集将抛出NotSuportedException.如何在不触发和捕获NotSupportedException的情况下判断程序集是否是动态的?

.net assemblies dynamic

44
推荐指数
2
解决办法
4828
查看次数

用于实例化内部类的奇怪语法

我没想到在这个阶段我会在Java中遇到全新的语法,但是,我刚刚遇到了一些问题:

确切的上下文以及下面的代码应该做的事情是非常无关紧要的 - 它只是提供某种上下文.

我正在尝试综合在IT Mill Toolkit中创建一个事件,所以我写了这样一行:

buttonClick(new Button.ClickEvent(button));
Run Code Online (Sandbox Code Playgroud)

但是,Eclipse给出了以下错误消息:

不能访问类型为Button的封闭实例.必须使用Button类型的封闭实例限定分配(egxnew A(),其中x是Button的实例).

当我按如下方式重写上面的行时,它不会再抱怨了:

buttonClick(button.new ClickEvent(button)); // button instanceof Button
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:后面的语法是什么意思,确切地说,为什么第一个片段不起作用?什么是Java抱怨,以及它在第二个版本中做了什么?

背景信息:无论ButtonButton.ClickEvent是非抽象公共类.

java constructor inner-classes

42
推荐指数
3
解决办法
2万
查看次数

寻找ARM Thumb2的有效整数平方根算法

我正在寻找一个快速,仅整数算法来找到无符号整数的平方根(整数部分).代码必须在ARM Thumb 2处理器上具有出色的性能.它可以是汇编语言或C代码.

任何提示欢迎.

embedded arm square-root

42
推荐指数
6
解决办法
5万
查看次数

如何在C#表达式树中设置字段值?

鉴于:

FieldInfo field = <some valid string field on type T>;
ParameterExpression targetExp = Expression.Parameter(typeof(T), "target");
ParameterExpression valueExp = Expression.Parameter(typeof(string), "value");
Run Code Online (Sandbox Code Playgroud)

如何编译lambda表达式以将"target"参数上的字段设置为"value"?

c# lambda expression-trees

40
推荐指数
3
解决办法
2万
查看次数

MASM/NASM差异

NASM和MASM汇编程序之间的语法差异是什么?

x86 assembly masm nasm

39
推荐指数
1
解决办法
2万
查看次数

互斥锁功能是否足够而没有易失性?

我和同事为在x86,x64,Itanium,PowerPC和其他10年历史的服务器CPU上运行的各种平台编写软件.

我们刚刚讨论了pthread_mutex_lock()... pthread_mutex_unlock()等互斥函数本身是否足够,或者受保护变量是否需要是volatile.

int foo::bar()
{
 //...
 //code which may or may not access _protected.
 pthread_mutex_lock(m);
 int ret = _protected;
 pthread_mutex_unlock(m);
 return ret;
}
Run Code Online (Sandbox Code Playgroud)

我担心的是缓存.编译器是否可以在堆栈或寄存器中放置_protected的副本,并在赋值中使用该陈旧值?如果没有,是什么阻止了这种情况发生?这种模式的变化是否易受攻击?

我假设编译器实际上并不理解pthread_mutex_lock()是一个特殊函数,所以我们只是受序列点保护吗?

非常感谢.

更新:好的,我可以看到一个趋势,答案解释了为什么不稳定是坏的.我尊重这些答案,但有关该主题的文章很容易在网上找到.我在网上找不到的,以及我问这个问题的原因,就是我如何保护我没有不稳定.如果上面的代码是正确的,那么缓存问题如何无懈可击?

c++ multithreading mutex volatile memory-barriers

39
推荐指数
3
解决办法
7299
查看次数