小编Mat*_*att的帖子

为什么C++优化器有这些临时变量的问题,或者为什么在紧密循环中应该避免使用`v []`?

在这段代码中,我正在比较两个功能相同的循环的性能:

for (int i = 1; i < v.size()-1; ++i) {
  int a = v[i-1];
  int b = v[i];
  int c = v[i+1];

  if (a < b  &&  b < c)
    ++n;
}
Run Code Online (Sandbox Code Playgroud)

for (int i = 1; i < v.size()-1; ++i) 
  if (v[i-1] < v[i]  &&  v[i] < v[i+1])
    ++n;
Run Code Online (Sandbox Code Playgroud)

在优化标志设置为O2:的许多不同C++编译器中,第一个运行速度明显慢于第二个编译器:

  • 使用Clang 3.7.0,第二个循环现在了约330%
  • 使用gcc 4.9.3,第二次循环慢约2%
  • 使用Visual C++ 2015,第二个循环慢约2%

我很困惑,现代C++优化器在处理这种情况时遇到了问题.任何线索为什么?我是否必须编写丑陋的代码而不使用临时变量才能获得最佳性能?

现在,使用临时变量可以使代码更快,有时甚至更快.到底是怎么回事?

我正在使用的完整代码如下:

#include <algorithm>
#include <chrono>
#include <random>
#include <iomanip>
#include <iostream>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ optimization performance

61
推荐指数
3
解决办法
5437
查看次数

可以在DOCTYPE声明之前出现评论吗?

我想<!-- this -->在DOCTYPE声明之前的HTML代码的最顶部放置注释(样式).这符合标准吗?它是否受到主流浏览器的支持?这样做有什么陷阱吗?

html doctype comments

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

在Visual Studio中以特定的行号打开文件

我有一个实用程序(grep),它给我一个文件名和行号列表.在我确定devenv是打开文件的正确程序之后,我想确保它在指定的行号处打开.在emacs中,这将是:

emacs +140 filename.c
Run Code Online (Sandbox Code Playgroud)

我发现Visual Studio(devenv)没有这样的东西.我找到的最接近的是:

devenv /Command "Edit.Goto 140" filename.c
Run Code Online (Sandbox Code Playgroud)

但是,这会为每个此类文件创建一个单独的devenv实例.我宁愿有一些使用现有实例的东西.

这些变体重复使用现有的devenv,但不会转到指定的行:

devenv /Command "Edit.Goto 140" /Edit filename.c
devenv /Command  /Edit filename.c "Edit.Goto 140"
Run Code Online (Sandbox Code Playgroud)

我认为使用多个"/ Command"参数可能会这样做,但我可能没有正确的参数因为我得到错误或根本没有响应(除了打开一个空的devenv).

我可以为devenv编写一个特殊的宏,但我希望这个实用程序可以被没有该宏的其他人使用.而且我不清楚如何使用"/ Command"选项调用该宏.

有任何想法吗?


好吧,似乎没有办法按我的意愿去做.由于看起来我需要有专门的代码来启动Visual Studio,所以我决定使用EnvDTE,如下所示.希望这会有助于其他人.

#include "stdafx.h"

//-----------------------------------------------------------------------
// This code is blatently stolen from http://benbuck.com/archives/13
//
// This is from the blog of somebody called "BenBuck" for which there
// seems to be no information.
//-----------------------------------------------------------------------

// import EnvDTE
#pragma warning(disable : 4278)
#pragma warning(disable : 4146)
#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("8.0") lcid("0") raw_interfaces_only …
Run Code Online (Sandbox Code Playgroud)

command-line visual-studio

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

如何在android中停止asynctask线程?

我想AsyncTask从另一个AsyncTask线程中停止一个线程.我试图 new AsyncTask.cancel(true)阻止后台进程,但它没有停止.

有人可以帮我吗?

android android-asynctask

55
推荐指数
4
解决办法
9万
查看次数

覆盖vs方法隐藏

关于覆盖与隐藏C#中的方法有点困惑.每个人的实际用途也将被理解,以及何时使用每个人的解释.

我对重写感到困惑 - 为什么要覆盖?到目前为止我所学到的是,通过覆盖,我们可以在不改变签名的情况下为派生类的方法提供所需的实现.

如果我不覆盖超类的方法并且我对子类中的方法进行了更改,那么是否会更改超类方法?

我也对以下内容感到困惑 - 这表明了什么?

class A
{
    virtual m1()
    {
        console.writeline("Bye to all");
    }
}

class B : A
{
    override m1()
    {
        console.writeLine("Hi to all");
    }
}

class C
{
    A a = new A();
    B b = new B();
    a = b; (what is this)
    a.m1(); // what this will print and why?

    b = a; // what happens here?
}
Run Code Online (Sandbox Code Playgroud)

c# overriding method-hiding

54
推荐指数
2
解决办法
5万
查看次数

为什么我不能将此更改推送到我的"主要"mercurial存储库?

我正试图找到Mercurial并希望我在这里感到困惑!

我有一个我已克隆的存储库('main')('clone'),都在我自己的机器上.两者完全相互同步.

我决定使用命名分支,所以下次我在'clone'上做的时候我在分支名称'case1212'下做了它,虽然它似乎已经在我的克隆上正确处理了提交,但是我无法将这些更改推回去'主'.给出的错误是:

abort: push creates new remote branch 'case1212'!
Run Code Online (Sandbox Code Playgroud)

......它表明我可能需要先合并?我应该在"克隆"存储库中合并什么?当我试图从'main'拉出时,没有任何变化.

我很确定我真的希望它在我的"主"存储库中创建一个远程分支,以便从中更新的人可以看到该分支.

mercurial branch tortoisehg

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

IE7中的盒子大小支持

我刚刚发现了box-sizing: border-boxCSS属性,它为我解决了一堆跨浏览器布局问题.

我现在唯一的问题是IE7似乎不支持它.有没有让IE7支持它的黑客攻击?

css css3 internet-explorer-7

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

用于新HTML5输入类型的ASP.NET MVC HTML帮助程序方法

HTML5似乎支持一系列新的输入字段,例如:

  • 数字
  • 电子邮件地址
  • 颜色
  • 网址
  • 数字范围(通过滑块)
  • 日期
  • 搜索框

有没有HtmlHelper人为ASP.NET MVC实现生成这些的扩展方法呢?可以使用接受的重载来执行此操作htmlAttributes,例如:

Html.TextBoxFor(model => model.Foo, new { type="number", min="0", max="100" })
Run Code Online (Sandbox Code Playgroud)

但那并不像以下那样好(或类型安全):

Html.NumericInputFor(model => model.Foo, min:0, max:100)
Run Code Online (Sandbox Code Playgroud)

.net asp.net-mvc html5 html-helper html-input

47
推荐指数
5
解决办法
7万
查看次数

故事板放大/缩小键盘快捷方式

我可以在Xcode中使用哪种快捷键组合来放大和缩小?是的,我知道这是一个愚蠢的问题,但Google搜索没有给我任何结果.即使是Xcode键盘快捷键也没有给我太多信息.也许我必须要求为Xcode 4.5提供更好的更新键盘快捷方式文档

xcode4

44
推荐指数
4
解决办法
3万
查看次数

如何在select查询中执行存储过程

SELECT col1,
       col2,
       col3,

EXEC GetAIntFromStoredProc(T.col1) AS col4
     FROM Tbl AS T
     WHERE (col2 = @parm) 
Run Code Online (Sandbox Code Playgroud)

如何在SQL Server 2008中编写此SQL查询?

sql sql-server stored-procedures sql-server-2008

41
推荐指数
5
解决办法
24万
查看次数