这是一个有界循环,它递增同一缓冲区的两个位置。
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,即使优化代码也不会改变结果。
我有以下使用协程的 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 的延迟
我们正在推进 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) #include <stdio.h>
int main(){
char s[] = {"hello"};
printf("%s", s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码可以编译并成功执行,但是如何将一维数组(char[] s)赋值为二维数组({"hello"})呢?
#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: 不打印任何内容
当我将子网格嵌套在网格内的填充子网格内时,不同浏览器之间的行为不一致。
这是代码:
.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)我有__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 …
当 macOS 应用程序添加到 Dock 时,会出现一些默认选项,例如退出、隐藏、在 Finder 中显示等。
我想在 Qt 应用程序的停靠菜单中添加更多选项。
我无法找到 Qt 提供的任何用于配置停靠菜单的工件。
使用 Qt 可以做到这一点吗?
我想编写一个宏来声明一个结构体字段并将该字段的初始化过程插入到一个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++ 实现这个吗?
如果预处理器在这种情况下无法提供帮助,您将如何使该结构定义更简单?
当我尝试将 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)
我从列表中得到的结果是行中的链接,但列中的每个字符。