编译为C ++与C时,GCC代码生成的巨大差异

我一直在玩x86-64程序集,尝试了解更多可用的各种SIMD扩展(MMX,SSE,AVX)。 为了看看不同的C或C ++构造如何通过GCC转换为机器代码,我一直在使用Compiler Explorer ,它是一个非常出色的工具。 在我的一个“游戏会话”中,我想看看GCC如何优化整数数组的简单运行时初始化。 在这种情况下,我试图将0到2047的数字写入2048个无符号整数的数组中。 代码如下所示: unsigned int buffer[2048]; void setup() { for (unsigned int i = 0; i < 2048; ++i) { buffer[i] = i; } } 如果我启用优化和AVX-512指令-O3 -mavx512f -mtune=intel GCC 6.3生成一些真正聪明的代码:) setup(): mov eax, OFFSET FLAT:buffer mov edx, OFFSET FLAT:buffer+8192 vmovdqa64 zmm0, ZMMWORD PTR .LC0[rip] vmovdqa64 zmm1, ZMMWORD PTR .LC1[rip] .L2: […]

为什么这个未使用的variables没有被优化?

我和Godbolt的CompilerExplorer玩过。 我想看看某些优化有多好。 我最低工作的例子是: #include <vector> int foo() { std::vector<int> v {1, 2, 3, 4, 5}; return v[4]; } 生成的汇编程序(由clang 5.0.0,-O2 -std = c ++ 14): foo(): # @foo() push rax mov edi, 20 call operator new(unsigned long) mov rdi, rax call operator delete(void*) mov eax, 5 pop rcx ret 正如人们所看到的,铿锵知道答案,但在返回之前做了很多事情。 在我看来,即使vector是创build,因为“运营商新/删除”。 任何人都可以向我解释这里发生了什么,为什么它不只是返回? 由GCC生成的代码(不在这里复制)似乎明确地构造了向量。 有谁知道GCC不能推断出结果?

免费的DNS服务器为Windows XP / Vista / Win7的?

我目前正在开发一个安全解决scheme,应该跨域工作,因此我需要一个小的私人DNS服务器添加各种条目。 我可以改变主机文件来达到相同的结果,但由于主机文件不支持通配符字符,我将有大量的条目,所以支持通配符的DNS服务器会更容易一些。 有什么build议么?

当用鼠标selectdate时,JQuery UI Datepicker失去焦点

我正在使用JQuery UI和datepicker,当用户select一个字段,他们适当地得到日历popup。 用户选项卡(通过键到字段 用户用鼠标点击selectdate 用户选项卡 Tabindex从1开始(在表单的开头) 这里是代码。 (也可能有标签索引集) <input type="text" name="demo" /> <input type="text" class="date" /> jquery代码是: $(".date").datepicker(); 关于如何解决这个问题的任何build议(奖金最短的解决scheme)?

为什么没有Windows.Forms.TreeView的SelectedNodeChanged事件?

System.Web.UI.WebControls.TreeView类提供这个事件,但是TreeView的Forms版本没有。 表单世界中的等价物是什么? 我使用的是AfterSelect,但看起来不太正确。 也许这是我正在寻找的东西,但是文档有点朦胧。

使用__setstate__和__getstate__的简单示例

我不知道__setstate__和__getstate__方法是做什么的,所以请帮助我一个简单的例子。

简单的networking服务器在C + +?

有没有任何参考或图书馆,将创build一个networking服务器(帮助)? (在C ++中)

按值sortingCouchDB视图

我正在testingCouchDB,看看它如何处理日志logging一些search结果。 我想要做的是产生一个视图,我可以从结果中产生最高的查询。 目前我有这样的事情: 示例文档部分 { "query": "+dangerous +dogs", "hits": "123" } 地图function (不完全是我需要/想要的,但它足够testing) function(doc) { if (doc.query) { var split = doc.query.split(" "); for (var i in split) { emit(split[i], 1); } } } 减lessfunction function (key, values, rereduce) { return sum(values); } 现在这将使我得到一个格式的结果,其中一个查询项是关键和右边的这个术语的计数,这是很好的。 但我希望按价值sorting,而不是按键。 从它的声音,这是不可能与CouchDB。 那么,有没有人有任何想法,我怎样才能得到一个视图,我有一个有序的查询条款及其相关计数版本? 我对CouchDB非常陌生,我不能想到如何编写所需的function。

ThreadPools中的exception处理

我有一个ScheduledThreadPoolExecutor似乎在吃exception。 如果提交的Runnable引发exception,我希望执行程序服务通知我。 例如,我想下面的代码至less打印IndexArrayOutOfBoundsException的stackTrace threadPool.scheduleAtFixedRate( new Runnable() { public void run() { int[] array = new array[0]; array[42] = 5; } }, 1000, 1500L, TimeUnit.MILLISECONDS); 作为一个侧面的问题。 有没有办法为ScheduledThreadPoolExecutor编写一个通用的try catch块? //////////原文问题结束////////////// 正如所build议的,以下装饰工程运作良好。 public class CatcherTask implements Runnable{ Runnable runMe; public CatcherTask(Runnable runMe) { this.runMe = runMe; } public void run() { try { runMe.run(); } catch (Exception ex){ […]

限制双精度到小数点后两位,不能有零

我读了这个和那个 。 我完全需要这个: 1.4324 =>“1.43” 9.4000 =>“9.4” 43.000 =>“43” 9.4 =>“9.40”(错误) 43.000 =>“43.00”(错误) 在这两个问题的答案指向NSNumberFormatter 。 所以应该很容易实现,但不适合我。 – (void)viewDidLoad { [super viewDidLoad]; UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 20)]; NSNumberFormatter *doubleValueWithMaxTwoDecimalPlaces = [[NSNumberFormatter alloc] init]; [doubleValueWithMaxTwoDecimalPlaces setNumberStyle:NSNumberFormatterDecimalStyle]; [doubleValueWithMaxTwoDecimalPlaces setPaddingPosition:NSNumberFormatterPadAfterSuffix]; [doubleValueWithMaxTwoDecimalPlaces setFormatWidth:2]; NSNumber *myValue = [NSNumber numberWithDouble:0.01234]; //NSNumber *myValue = [NSNumber numberWithDouble:0.1]; myLabel.text = [doubleValueWithMaxTwoDecimalPlaces […]