设置与自身相等的变量确实在C 中执行

Does setting a variable equal to itself actually execute in C++?

本文关键字:执行 变量 设置      更新时间:2023-10-16

我正在努力创建遗忘的图形算法,这基本上隐藏了算法的内存访问模式。假定内存是加密的,但可以由攻击者监视。假定处理器在云中,保持安全并具有自己的缓存。

已知图的访问模式可以揭示有关该图的信息。

为了使算法遗忘,有必要在算法中添加虚拟工作。这样的工作包括阅读和写入数据,但以一种不引起算法的结果的方式(此类更改将使算法无用)。

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

当然,添加虚拟工作会产生放缓。因此,作为一个精益解决方案,我想为自己分配一个变量。这将创建一个读取和写入位置,而无需实际更改任何内容。我的问题是,编译器实际上是否执行此代码(似乎在GDB中,但这仅仅是因为它是一个调试器)吗?我正在使用GCC,但是最好是使用不同的编译器编译算法并仍然遗忘。

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

最后,此算法是多线程。如果将全局变量设置为等于自身,是否有必要在其上放置互斥锁?这样的锁当然会放慢速度,所以我想在可能的情况下避免。

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

如何在GCC中禁用编译器优化?

编辑:关于您的多线程问题,取决于。如果对变量的唯一访问是自我分配,则没有,因为交错执行不会改变变量的值,无论运行多少个线程。但是,如果至少一个线程以其他方式突变变量,则必须使用锁。