我真的很喜欢std::byte作为一种独特的类型,它实现了 C++ 语言定义中指定的字节概念。 我不喜欢的是现代 C++ 编译器将使用标准算法生成优化程度较低的代码。 在这里,我正在玩一个 function,它检查 header 中的前 4 个字节,您可以在Godbolt上关注我的代码片段 这将在 ...
我真的很喜欢std::byte作为一种独特的类型,它实现了 C++ 语言定义中指定的字节概念。 我不喜欢的是现代 C++ 编译器将使用标准算法生成优化程度较低的代码。 在这里,我正在玩一个 function,它检查 header 中的前 4 个字节,您可以在Godbolt上关注我的代码片段 这将在 ...
与 say bool 相比,memcmp 的 signed int 返回值有何优点? 除了将其与零进行比较外,我认为我从未使用过 memcmp 的返回值。 ...
我有一个 integer 的结构,我正在使用 memcmp 比较结构,我不想使用其他方法。 memcmpa 应该返回 -1,但它返回 1。为什么? memcmp one.d = 1022 和 two.d = 1023 将返回正确的值。 为什么会这样? ...
我发现如果两个字符串中的第一个字节不同, memcmp()会更早返回 false,并且我认为它存在时序攻击风险。 但是,当我试图找出是否有其他功能存在诸如memcmp之类的侧通道风险时,我找不到任何信息。 ...
我有两个双精度x和y已知y是一个特定的 NaN 值,我想看看它们是否按位相同。 也就是说,我想确定x是否与y完全相同的 NaN 值。 NaN 无法与==运算符进行有用的比较,因为 NaN 永远不会等于任何其他值(甚至它们本身也不等于)。 有没有比以下“按位相等”方法更好的方法(这种方法合法吗?) ...
我正在尝试创建自己的memcmp文件,但是每当我将其与原始memcmp function 进行比较时,相等的字符串返回零,但如果字符串不相等,则返回值不同。 output 与真正的memcmp function 相比是 ./a.out "ajinkya" "akinkya" MEMCMP:-2 ...
我正在制作一个 function 来获取每个大小为 SIZ 的 NMEMB 成员数组的最大值,并将每个成员与memcmp()进行比较。 问题是在比较有符号整数时,结果是不正确的,但同时是正确的。 这是一个例子:void * getmax(const void *data, size_t nmemb, ...
受这个问题的启发,我比较了三个不同的函数来检查参数指向的 8 个字节是否为零(请注意,在原始问题中,字符与'0'进行比较,而不是0 ): 虽然我希望启用优化后的汇编结果相同,但只有memcmp版本被翻译成 x64 上的单个cmp指令。 f1和f2都被翻译成缠绕或未缠绕的循环。 此外,这适用于所有 ...
使用提供的 gcc 6.3.1 运行 Atmel Studio,为 Atmel/Microchip SAMV70 (ARM Cortex-M7) 芯片构建固件。 我有使用memcmp()将 4 字节输入数组与 4 字节本地数组进行比较的代码。 当使用-O0编译以禁用优化时,它工作正常。 当使用-Os ...
我想以通用的方式比较结构,我已经做了这样的事情(我不能分享实际的来源,所以如果有必要,请询问更多细节): 这主要按预期工作,但有时即使两个结构实例具有相同的成员(我已经使用 eclipse 调试器检查过),它也会返回 false。 经过一番搜索,我发现memcmp可能会由于填充使用的结构而失败。 ...
我正在将两个字节 arrays 与memcmp进行比较(或者更确切地说是一个库 function 这样做)。 arrays可以变大,很多情况下其实可以是同一个数组。 写这样的东西有意义吗,还是memcmp已经在内部这样做了? ...
我正在使用do while语句在名称之前使用Mr或ms或Mrs进行输入名称验证。 我应该在while部分填写什么? 它是使用strcmp还是其他东西? 编码范例 ...
我正在处理一些具有高级接口的低级代码,并且觉得需要比较运算符来对普通旧数据类型(如 FILETIME 结构)进行单元测试,但由于 C++ 甚至不提供成员比较,所以我写了这个: 所以我的问题是,这是一个好方法还是有一些隐藏的恶魔会在开发周期的后期给我带来麻烦,但现在它有点工作。 ...
我使用memcmp函数比较了两个字符串文字。 在上面的程序中, str2比str1短。 这意味着字符串str2超出范围。 那么,这是不确定的行为吗? ...
如果我将第一个和第二个参数的相等指针传递给memcmp ,我怀疑它可能只返回0而没有检查元素-因为如果传递相同的指针,则元素必须为零。 在我看来,检查指针是否相等并尽早退出是一种很好的优化方法。 我检查了glibc和Free BSD LibC的实现,但似乎都没有进行此优化。 因此, ...
我有很多大小不超过8的琴弦。 我需要使用memcmp() / strcmp()进行很多比较。 我想知道如果将所有转换都转换为std::uint64_t比较是否会更快地进行。 在这种情况下,至少在理论上比较是无分支的,并且在单CPU操作中也会发生。 有人尝试过类似的东西吗? ...
glibc中函数memcmp的实现使用宏DBLALIGN(例如DBLALIG(a3,a0,srcli))来比较两个不带整数的int整数。 DBLALIGN的内容如下。 但是,在glibc源代码中找不到__insn_dword_align的定义。 我在哪里可以找到它。 谢谢! ...
我想知道memcmp函数必须返回什么。 我一直在互联网上搜索,通常, memcmp定义说明如下: memcmp()函数返回一个大于,等于或小于零的整数,因为s1指向的对象大于,等于或小于s2指向的对象。 这是从来没有明确地说, 究竟是什么,则返回:这是两个字节的值之间的差 ...
我有一个类,其中在特定成员上用memcmp()重载了==运算符。 由于代码中的复制不正确(调用memcpy大小超出了应有的大小),在调用==运算符时出现了段错误。 我了解UB是一个神秘的事物,而且显然是不确定的,但我仍然发现有些东西吸引了我。 在调试时,我将==调用替换为其实现(即 ...
我正在使用具有许多成员的大型结构,并且我想采用一种简单的方法来快速查看是否有任何成员不为零。 我知道memcmp()不应用于比较两个相等的结构(如此处所述: 如何在C中比较相等的结构? ),但我希望通过将一个结构与一个已经存在的内存块进行比较来实现设置为0,这可能会起作用。 例如,假设我 ...