c++ - 设置一个等于自身的变量实际上在 C++ 中执行吗?

标签 c++ algorithm gcc mutex variable-assignment

<分区>

我正致力于创建不经意的图形算法,它基本上隐藏了算法的内存访问模式。假定内存已加密,但可以被攻击者监控。假定处理器位于云端、安全且拥有自己的缓存。

众所周知,图的访问模式可以揭示有关该图的信息。

为了让算法不被遗忘,有必要在算法中添加虚拟工作。这些工作包括读取和写入数据,但不会导致算法结果发生变化(当然,这种变化会使算法无用)。

虚拟工作必须在图本身上,否则攻击者将能够追踪哪些工作是真实的,哪些工作是假的。

当然,添加虚拟工作会降低速度。因此,作为一个精益解决方案,我想为自己分配一个变量。这将在不实际更改任何内容的情况下创建对位置的读取和写入。我的问题是,编译器是否真的执行了这段代码(它似乎在 gdb 中,但这仅仅是因为它是一个调试器)?我正在使用 gcc,但如果算法可以用不同的编译器编译并且仍然保持健忘,那将是最好的。

将变量设置为等于自身的替代方法是使用 if 语句:检查变量是否等于某个值,然后在 if 语句中将变量设置为该值。如果可能的话,我想避免使用 if 语句,因为它们会减慢速度。

最后,这个算法是多线程的。如果一个全局变量被设置为等于它自己,是否有必要在它上面加一个互斥锁?这样的锁当然会减慢速度,所以我想尽可能避免使用它们。

最佳答案

编译器优化器可能会在编译器时完全删除该语句,因此它可能不会执行。调试通常不使用优化代码,因为您单步执行每个语句,因此它会在那里执行。如果您愿意,可以关闭编译器优化,然后进行测试。 gcc 的标志是 -O0

How to disable compiler optimizations in gcc?

编辑:关于您的多线程问题,视情况而定。如果对变量的唯一访问是自赋值,则不会,因为无论有多少线程正在运行,交错执行都不会更改变量的值。但是,如果至少有一个线程以某种其他方式改变变量,那么您将不得不使用锁。

关于c++ - 设置一个等于自身的变量实际上在 C++ 中执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37864515/

相关文章:

c++ - gcc 4.9.2 -Werror=sizeof-pointer-memaccess 错误?

c - 在 Mac OS high sierra 上安装 GCC

c++ - 使用 gcc 编译内联汇编时出错, "shl"

c# - 重试过程的算法

java - 从特定叶子开始的自底向上树遍历

c++ - 如何“适应”仿函数以与 map /多重 map 一起使用?

c++ - 我在这段代码中要求一个数字,如果用户给的是一封信,我该怎么办?

c++ - 哪种进化算法可以优化二元问题?

c++ - 轮廓的排序点

c++ - 如何通过英特尔 C++ 编译器 (ICC) 在三种方法上使用 SFINAE?