设置与自身相等的变量确实在C 中执行
Does setting a variable equal to itself actually execute in C++?
我正在努力创建遗忘的图形算法,这基本上隐藏了算法的内存访问模式。假定内存是加密的,但可以由攻击者监视。假定处理器在云中,保持安全并具有自己的缓存。
已知图的访问模式可以揭示有关该图的信息。
为了使算法遗忘,有必要在算法中添加虚拟工作。这样的工作包括阅读和写入数据,但以一种不引起算法的结果的方式(此类更改将使算法无用)。
有必要将虚拟工作在图本身上,否则攻击者将能够追踪哪些工作是真实的,哪些工作是假的。
当然,添加虚拟工作会产生放缓。因此,作为一个精益解决方案,我想为自己分配一个变量。这将创建一个读取和写入位置,而无需实际更改任何内容。我的问题是,编译器实际上是否执行此代码(似乎在GDB中,但这仅仅是因为它是一个调试器)吗?我正在使用GCC,但是最好是使用不同的编译器编译算法并仍然遗忘。
设置与自身的变量相等的替代方法是使用if语句:检查变量是否等于某些值,然后将变量设置为IF语句中的该值。如果可能的话,我想避免使用陈述,因为它们会放慢速度。
最后,此算法是多线程。如果将全局变量设置为等于自身,是否有必要在其上放置互斥锁?这样的锁当然会放慢速度,所以我想在可能的情况下避免。
编译器优化器可能会在编译器时间完全删除该语句,因此不可能执行。调试通常不使用优化的代码,因为您逐步浏览每个语句,以便在此执行。如果愿意,可以关闭编译器优化,然后进行测试。GCC的标志是-O0
如何在GCC中禁用编译器优化?
编辑:关于您的多线程问题,取决于。如果对变量的唯一访问是自我分配,则没有,因为交错执行不会改变变量的值,无论运行多少个线程。但是,如果至少一个线程以其他方式突变变量,则必须使用锁。
相关文章:
- 执行函数时导致崩溃的变量
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 对OpenMP reduction子句中的变量执行原子操作
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 子线程中的条件变量等待停止主线程中的执行
- 如果函数包含静态变量,为什么编译器不执行内联?
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 我如何将一个变量与另一个变量进行比较,例如我想如果(var1 > var2 x 1),然后执行此 c++
- 在 MinGW 和 MinGW-64 上执行命令后变量为空?
- 程序的执行在 C++ 中输入 char 变量后结束
- 即使变量为 false,'If'也会执行
- make_shared是否对每个成员变量执行默认初始化(零初始化)
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 在调用进程的上下文中通过 win32 执行批处理,从而保留环境变量
- 为什么在执行条件变量通知之前我们需要一个空的 std::lock_guard?
- QProcess::执行环境变量扩展字符串
- 在C++的系统中执行变量(" " )
- 使用类定义来执行变量
- 识别和执行变量