标签: optimization

为什么(a%256)与(a&0xFF)不同?

我总是假设在做(a % 256)优化器时自然会使用有效的按位操作,就像我写的那样(a & 0xFF).

在编译器资源管理器gcc-6.2(-O3)上进行测试时:

// Type your code here, or load an example.
int mod(int num) {
    return num % 256;
}

mod(int):
    mov     edx, edi
    sar     edx, 31
    shr     edx, 24
    lea     eax, [rdi+rdx]
    movzx   eax, al
    sub     eax, edx
    ret
Run Code Online (Sandbox Code Playgroud)

在尝试其他代码时:

// Type your code here, or load an example.
int mod(int num) {
    return num & 0xFF;
}

mod(int):
    movzx   eax, dil
    ret
Run Code Online (Sandbox Code Playgroud)

好像我完全错过了一些东西.有任何想法吗?

c++ optimization

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

在std :: string的上下文中首字母缩略词SSO的含义

关于优化和代码风格的C++问题中,在优化副本的上下文中,有几个答案提到了"SSO" std::string.在这种情况下,SSO意味着什么?

显然不是"单点登录"."共享字符串优化",或许?

c++ string optimization

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

为什么Magento这么慢?

Magento通常非常慢吗?

这是我第一次体验它,管理面板只需要很长时间来加载和保存更改.它是包含测试数据的默认安装.

托管它的服务器可以超快速地为其他非Magento站点提供服务.什么是Magento使用的PHP代码使它变得如此缓慢,以及可以采取哪些措施来解决它?

php optimization magento

136
推荐指数
7
解决办法
10万
查看次数

密封课真的提供性能优势吗?

我遇到了很多优化提示,说明你应该将你的课程标记为密封以获得额外的性能优势.

我运行了一些测试以检查性能差异,但没有找到.难道我做错了什么?我错过了密封课程会给出更好结果的情况吗?

有没有人进行测试并看到了差异?

帮我学习:)

.net optimization performance frameworks

134
推荐指数
5
解决办法
3万
查看次数

为什么Java API使用int而不是short或byte?

为什么Java API会使用int,何时short甚至byte是足够的?

示例:DAY_OF_WEEK类中的字段Calendar使用int.

如果差异太小,那么为什么存在这些数据类型(short,int)?

java optimization types java-api

134
推荐指数
5
解决办法
1万
查看次数

SQL Server索引 - 升序或降序,它有什么区别?

当您在MS SQL Server(我使用的是版本2005)中的列或列数上创建索引时,您可以指定每列上的索引是升序还是降序.我很难理解为什么这个选择就在这里.使用二进制排序技术,任何一种查找都不会那么快吗?它选择哪个订单有什么区别?

sql sql-server indexing optimization

132
推荐指数
3
解决办法
8万
查看次数

当95%的情况下的值为0或1时,对非常大的数组进行随机访问的任何优化?

在一个非常大的阵列上是否有任何可能的随机访问优化(我目前使用uint8_t,我问的是什么更好)

uint8_t MyArray[10000000];
Run Code Online (Sandbox Code Playgroud)

当数组中任何位置的值为

  • 95%的情况下为01,
  • 4%的情况下 2 %
  • 在另外1%的情况下,3255之间?

那么,有没有什么比uint8_t用于此的数组更好?它应该尽可能快地以随机顺序循环遍历整个阵列,并且这对RAM带宽非常重,因此当有多个线程同时为不同的阵列执行时,当前整个RAM带宽很快就饱和了.

我问,因为实际上已知除了5%之外几乎所有的值都是0或1时,拥有如此大的数组(10 MB)效率非常低效.因此当数组中所有值的95%时实际上只需要1位而不是8位,这会将内存使用量减少几乎一个数量级.感觉必须有一个更节省内存的解决方案,这将大大减少为此所需的RAM带宽,因此随机访问也会明显更快.

c++ arrays optimization performance memory-bandwidth

132
推荐指数
8
解决办法
1万
查看次数

检测浏览器选项卡是否具有焦点

是否有可靠的跨浏览器方式来检测选项卡是否具有焦点.

场景是我们有一个应用程序定期轮询股票价格,如果页面没有焦点我们可以停止轮询并节省每个人的交通噪音,特别是当人们是打开不同组合的几个选项卡的粉丝.

window.onblurwindow.onfocus这个选项?

javascript optimization polling

131
推荐指数
7
解决办法
11万
查看次数

在发布模式下,代码行为不符合预期

以下代码在调试模式和发布模式下生成不同的结果(使用Visual Studio 2008):

int _tmain(int argc, _TCHAR* argv[])
{

    for( int i = 0; i < 17; i++ ) 
    { 
        int result = i * 16;

        if( result > 255 )
        {
            result = 255;
        }

        printf("i:%2d, result = %3d\n", i, result) ; 
    } 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

调试模式的输出,如预期的那样:

i: 0, result =   0
i: 1, result =  16
(...)
i:14, result = 224
i:15, result = 240
i:16, result = 255
Run Code Online (Sandbox Code Playgroud)

释放模式的输出,其中i:15结果不正确:

i: 0, result =   0
i: 1, result …
Run Code Online (Sandbox Code Playgroud)

c c++ optimization visual-studio-2008 compiler-bug

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

为什么在限制为959但不是960时优化一个简单的循环?

考虑这个简单的循环:

float f(float x[]) {
  float p = 1.0;
  for (int i = 0; i < 959; i++)
    p += 1;
  return p;
}
Run Code Online (Sandbox Code Playgroud)

如果您使用gcc 7(快照)或clang(主干)进行编译,-march=core-avx2 -Ofast则会得到与之非常相似的内容.

.LCPI0_0:
        .long   1148190720              # float 960
f:                                      # @f
        vmovss  xmm0, dword ptr [rip + .LCPI0_0] # xmm0 = mem[0],zero,zero,zero
        ret
Run Code Online (Sandbox Code Playgroud)

换句话说,它只是将答案设置为960而不进行循环.

但是,如果您将代码更改为:

float f(float x[]) {
  float p = 1.0;
  for (int i = 0; i < 960; i++)
    p += 1;
  return p;
}
Run Code Online (Sandbox Code Playgroud)

生成的程序集实际执行循环求和?例如clang给出:

.LCPI0_0:
        .long   1065353216              # …
Run Code Online (Sandbox Code Playgroud)

c optimization gcc clang

131
推荐指数
3
解决办法
7233
查看次数