问题列表 - 第317980页

为什么 GCC 无法减少增加同一缓冲区两个位置的循环?

这是一个有界循环,它递增同一缓冲区的两个位置。

unsigned int getid();
void foo(unsigned int *counter, unsigned int n) {
        unsigned int A = getid();
        unsigned int B = getid();
        for (unsigned int i = 0; i < n; i++) {
            ++counter[A];
            ++counter[B];
        }
}
Run Code Online (Sandbox Code Playgroud)

根据编译器资源管理器(https://godbolt.org/z/b1sjf5669)的结果,即使在-O3优化级别,程序仍然存在涉及命令的循环add 1。

相反,如果++counter[B]删除,编译器可以减少循环并将程序优化为counter[A] += n. (https://godbolt.org/z/4YoPcz5rT)

为什么编译器是保守的,即不将代码转换为counter[A] += n, counter[B] += n这种情况?

我知道一些别名问题会导致循环减少失败。然而,这里只有一个缓冲区A=B,即使优化代码也不会改变结果。

c++ compiler-construction optimization assembly gcc

8
推荐指数
0
解决办法
121
查看次数

为什么 Kotlin 协程即使有延迟也会输出“A B”?

我有以下使用协程的 Kotlin 代码片段,我对输出感到困惑。有人可以解释为什么在这两种情况下输出都是“A B”吗?

// Code Snippet 1
fun main() {
  CoroutineScope(Dispatchers.IO).launch { 
        print("A")
    }
    print("B")
}
Run Code Online (Sandbox Code Playgroud)

输出:AB

// Code Snippet 2
fun main() {
    CoroutineScope(Dispatchers.IO).launch { 
        delay(200)
        print("A")
    }
    print("B")
}
Run Code Online (Sandbox Code Playgroud)

输出AB

我已经在 kotlin 游乐场上运行了这段代码(链接 - kotlin 游乐场 我无法理解为什么 A 在 B 之前打印,即使添加了 200ms 的延迟

kotlin kotlin-coroutines

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

即使实施 List-Unsubscribe 标头后,“从邮件列表取消订阅”链接也不会显示

我们正在推进 List-Unsubscribe 标头的实施,以遵守 Gmail 发件人指南。在进行测试时,我们注意到“从邮件列表退订”链接没有出现在收件人端的 Gmail 客户端中。

对于这个问题,有什么潜在的原因吗?

下面,我提供了标题数据(出于隐私考虑,一些信息被编辑)。

Delivered-To: ****@*******.***
Received: by 2002:a05:6520:4646:b0:283:91a:1adb with SMTP id el6csp795303lkb;
        Thu, 7 Dec 2023 01:47:51 -0800 (PST)
X-Google-Smtp-Source: AGHT+IGkrxRIriFcwqWDTLZPZDyX5RuCa+ot/NqD6tt21gj6L277nrfC2x3Zl7JRzTu1QcYm9j7i
X-Received: by 2002:a05:6a20:1444:b0:187:eea9:73c5 with SMTP id a4-20020a056a20144400b00187eea973c5mr2887137pzi.3.1701942471560;
        Thu, 07 Dec 2023 01:47:51 -0800 (PST)
ARC-Seal: i=1; a=rsa-sha256; t=1701942471; cv=none;
        d=google.com; s=arc-20160816;
        b=GS5MDCFcvdw0Nx38THlBQmTf/KBckJf9kIS2ZKCVZoYvIdheBNA4vrTcYERxOILXIF
         QCQohBLkTVeVO9y1em0tTS5d7CEduYlNWoR6ay+CLzQSxNbpKtxvU8ECapg3mkxaLjcQ
         tDDAALDfRiDJxlsnrNmiITEBuVwNNmOldWXeUlKNN6OYqvBKqGaJghZS3B+HeoJ1AzjH
         o9/db0wY7T/LtBekGHcfQvBu33oBZUWpLmaNbBnKupglvx0kEc9foRaBL98jISXNEKD9
         uK4qxg4e421JDiaY+/w7yDjcNND0x38nhA4R8miCY4ujAm0J7AEyQTdXWVbbHqCojXyS
         weqw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
        h=content-transfer-encoding:date:errors-to:from:list-unsubscribe
         :list-unsubscribe-post:message-id:mime-version:subject:to;
        bh=f6DQBjo8rYX19JpB+nIPzKzcW1UlXBE5kq7UPzfAJfg=;
        fh=m4DbYAsBOnwc1IUh2REZnorY/4DwaOqFeBwm9y++uQU=;
        b=qOyTVHWiNRQsIFjOQ/3BZwzjmympKlkaKuz0repcIqpRi4HPqh6XPA7xfTob34gamI
         gbga9G4Cj+5QC350sOoJEIrCIENRvNPIgdi8jk58KuLBhmwGRUhi3IZkGkWSdac0gnfI
         fvk11SsUHhFmfJIDbr31m8Vgm4kwbmknrdVbbkQKX1hSpcGpIZpYa34RkAyoJznGQJS6
         CFxCQAT2KaJMcKQS3PPkSy+VPS9W4eJuDO4Bapdj+WcSwnZQ8aCWutAJ8dtDSZHteKIS
         mBor2qgK2Qf3zuxvke8VAbKzoqqqooqA9RbbENf+IBawn3avvHTI1YXUM3A5JxW0wg3L
         8+7Q==
ARC-Authentication-Results: i=1; mx.google.com;
       spf=pass (google.com: domain of *****-*********-****************@*******.*** designates xxx.xxx.xxx.xxx …
Run Code Online (Sandbox Code Playgroud)

gmail list-unsubscribe

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

是 char s[] = {"ABC"}; 合法的?

#include <stdio.h>
int main(){
    char s[] = {"hello"};
    printf("%s", s);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码可以编译并成功执行,但是如何将一维数组(char[] s)赋值为二维数组({"hello"})呢?

c arrays declaration string-literals list-initialization

1
推荐指数
1
解决办法
179
查看次数

在 C 中调用空函数是否会调用 UB?

#include <stdio.h>

static int foo(){}

int main(){
  if (foo()) {
    printf("OK\n");
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不太确定是否中止这一点,而且我在ISO/IEC 9899:1999 (E)中还没有找到任何解释。也许我错过了。那么,if(foo())UB属于这种情况吗?

我用gcc7.3 aarch64-linux进行测试。
-O0: 打印 OK
- O1to -O3: 不打印任何内容

c undefined-behavior

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

具有深度嵌套子网格的浏览器之间的行为不一致

当我将子网格嵌套在网格内的填充子网格内时,不同浏览器之间的行为不一致。

Chrome/Edge (Windows) 火狐(Windows) Safari MacOS
在此输入图像描述 在此输入图像描述 在此输入图像描述

这是代码:

.grid {
  display: grid;
  grid-template-columns: [fullwidth-start] 100px [col1-start] 1fr [col1-end col2-start] 1fr [col2-end col3-start] 1fr [col3-end] 100px [fullwidth-end];
}
.grid .subgrid {
  display: grid;
  grid-column: fullwidth;
  grid-template-columns: subgrid;
}

.pad {
  padding-inline: 200px;
}

.setgap {
  padding-block: 1em;
  background-color: #def;
  display: grid;
  gap: 1em;
  grid-column: fullwidth;
  grid-template-columns: subgrid;
}

.col1_2 {
  background-color: #edf;
  padding: 1em;
  grid-column: col1-start/span 2;
}

.col3 {
  padding: 1em;
  background-color: #fde;
  grid-column: col3;
}
Run Code Online (Sandbox Code Playgroud)
<div class="grid">
  <div class="subgrid pad"> …
Run Code Online (Sandbox Code Playgroud)

css cross-browser subgrid

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

折叠 __mask64 又名 64 位整数值,计算已设置所有位的半字节?

我有__mask64一些 AVX512 操作的结果:

__mmask64 mboth = _kand_mask64(lres, hres);

我想计算其中所有位均已设置的半字节数 ( 0xF)。

简单的解决方案是这样做:

uint64 imask = (uint64)mboth;
while (imask) {
    if (imask & 0xf == 0xf)
        ret++;
    imask = imask >> 4;
} 
Run Code Online (Sandbox Code Playgroud)

我想要更好的东西,但我想出的东西并不优雅:

    //outside the loop
    __m512i b512_1s = _mm512_set1_epi32(0xffffffff);
    __m512i b512_0s = _mm512_set1_epi32(0x00000000);

    //then...
    __m512i vboth = _mm512_mask_set1_epi8(b512_0s, mboth, 0xff);
    __mmask16 bits = _mm512_cmpeq_epi32_mask(b512_1s, vboth);
    ret += __builtin_popcount((unsigned int)fres);
Run Code Online (Sandbox Code Playgroud)

上面将一个0xff字节放入一个向量中,其中掩码中存在 1 位,然后当现在发现bits放大的半字节为' 时,在掩码中获取一个 1 位。0xf0xffffffff int32

我觉得当原始数据存在于 64 位数字中时,两个 512 …

c++ bit-manipulation avx avx512

3
推荐指数
1
解决办法
169
查看次数

如何向 Dock 图标菜单添加新选项

当 macOS 应用程序添加到 Dock 时,会出现一些默认选项,例如退出、隐藏、在 Finder 中显示等。

我想在 Qt 应用程序的停靠菜单中添加更多选项。

我无法找到 Qt 提供的任何用于配置停靠菜单的工件。

使用 Qt 可以做到这一点吗?

停靠菜单图标的上下文菜单

macos qt menu dock

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

我可以使用C++宏将代码插入到不同的地方吗?

我想编写一个宏来声明一个结构体字段并将该字段的初始化过程插入到一个Init()函数中。但我发现宏不可能将代码插入到不同的位置(在本例中为字段声明和 Init() 函数定义)。

// I have 
template <typename T>
T* initValue() {
  // return T* or nullptr
}

// I need some sort of 
DECL_CLASS(MyClass)
DECL_FIELD(int, foo)
DECL_FIELD(float, bar)
DECL_CLASS_END()

// To generate
struct MyClass {
  int *foo;
  float *bar;

public:
  bool Init() {
    if (!(foo = initValue<decay_t<decltype(*foo)>>())) {
      return false;
    }
    if (!(bar = initValue<decay_t<decltype(*bar)>>())) {
      return false;
    }
    return true;
  }
};
Run Code Online (Sandbox Code Playgroud)

我可以使用某种代码生成工具(例如 cog)来实现此目的,但我不想在代码库中引入额外的语法。我可以用纯 C++ 实现这个吗?

如果预处理器在这种情况下无法提供帮助,您将如何使该结构定义更简单?

c++ template-meta-programming preprocessor-meta-program

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

列表转 csv Python

当我尝试将 Python 列表保存在 csv 中时,csv 包含我想要保存的项目,并用每个字符分隔。

我有一个这样的列表,其中包含链接:

links = ['https://www.portalinmobiliario.com/MLC-2150551226-departamento-los-talaveras-id-117671-_JM#position=1&search_layout=grid&type=item&tracking_id=01bab66e-7cd3-43ce-b3d7-8389260b443d', 
         'https://www.portalinmobiliario.com/MLC-2148268902-departamento-los-espinos-id-116373-_JM#position=2&search_layout=grid&type=item&tracking_id=01bab66e-7cd3-43ce-b3d7-8389260b443d']
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码将其保存到 csv 中:

with open('links.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(links)
Run Code Online (Sandbox Code Playgroud)

我从列表中得到的结果是行中的链接,但列中的每个字符。

  • 如何获得按行分隔但在同一列中的链接?

python csv list python-3.x

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