草庐IT

memory-access

全部标签

c++ - g++ : Is there a way to access compile flags inside the code that is being compiled?

有没有一种方法(例如,定义的常量)来访问正在编译的代码中运行编译器的编译标志。例如,我想要一个程序来写入编译时使用的标志。intmain(){std::coutgcc/g++是否存在这样的常量?或者更好:是否有在gcc和clang中都定义的常量?我对检查优化级别和-march标志的值特别感兴趣。那么,如果没有显示所有标志的常量,是否至少有显示这些值的常量? 最佳答案 以下命令打印出所有预定义的宏:g++-dM-E-这适用于gcc和g++。您可以自行检查-不幸的是,没有宏可让您轻松访问完整的gcc/g++命令行。幸运的是,大多数-m.

c++ - Visual Studio 2008/10 的即时窗口中的 "search memory"是否损坏?

在VisualStudio2005中,我开始严重依赖MSVC的立即窗口来处理itsusefulsearch-through-memory-for-byte-patternsfeature。.我们最近升级到VS2010,现在.S命令似乎不再起作用了。对于我尝试的任何搜索,即使我直接复制粘贴theexamplesfromMSDN,当我尝试使用内存搜索时,总是出现以下错误:CXX0014:Error:missingoperandOthershavereportedthisproblemhereonSO,但谷歌没有出现任何有用的讨论。此功能在MSVC2010中是否被简单地破坏了?我感觉微软在他

c++ - 如何在 Qt 中创建类似连续子表单(小部件)的 ms-access?

我正在考虑将我的访问应用程序移植到Qt。我有兴趣学习如何做连续的子表单,子自定义小部件,用于以真正可滚动的非数据网格方式呈现/编辑/插入记录集中的数据。这意味着我可以为每条记录放置按钮、标签、组合、lineEdit...等等。我喜欢QTableView和委托(delegate)。我只是不知道是否可以修改它以完全模拟访问子表单。附带问题(可能是相同的答案)...他们如何在后台访问这些连续表单。谢谢...不是该示例记录集中的真实应用程序数据 最佳答案 QtMVC可能是您问题的最佳/最简单的答案(http://qt-project.org

c++ - 什么是 C++11 原子 API 等同于 `` `__asm__ volatile ("":::: "memory")`` `

一个代码库有一个COMPILER_BARRIER宏定义为__asm__volatile("":::"memory").宏的目的是防止编译器跨屏障重新排序读写。请注意,这显然是编译器屏障,不是处理器级内存屏障。事实上,这是相当可移植的,因为在AssemblerTemplate中没有实际的汇编指令,只有volatile和memory破坏。因此,只要编译器支持GCC的ExtendedAsm语法,它就应该可以正常工作。不过,我很好奇如果可能的话,在C++11原子API中表达这一点的正确方法是什么。以下似乎是正确的想法:atomic_signal_fence(memory_order_acq_r

C++0X memory_order 无围栏,应用,支持的芯片

作为我之前question的跟进,atomic类使用memory_order指定大多数操作范围。与栅栏相反,此内存顺序仅影响其操作的原子。据推测,通过使用几个这样的原子,您可以构建一个并发算法,其中其他内存的顺序并不重要。所以我有两个问题:有人能给我指出一个算法/情况的示例,该算法/情况可以从单个原子变量的排序中受益并且不需要需要栅栏吗?哪些现代处理器支持这种行为?也就是说,编译器不会只是将特定顺序转换为正常的围栏。 最佳答案 关于std::atomic操作的内存排序参数变量不会影响该操作本身的顺序,它会影响该操作与其他操作创建的顺

c++ - 为什么 memory_order_relaxed 在 x86 上使用原子(锁前缀)指令?

在VisualC++2013上,当我编译以下代码时#includeintmain(){std::atomicv(2);returnv.fetch_add(1,std::memory_order_relaxed);}我在x86上取回了以下程序集:51pushecxB802000000moveax,28D0C24leaecx,[esp]8701xchgeax,dwordptr[ecx]B801000000moveax,1F00FC101lockxadddwordptr[ecx],eax59popecxC3ret在x64上类似:B802000000moveax,287442408xchgea

c++ - 异常错误 : Access violation reading location 0xDDDDDDDD

我正在尝试用C++创建一个动态字符串数组。当尝试将我的动态字符串数组的内容显示到控制台时,我收到此错误:Exceptionthrownat0x0FD670B6(msvcp140d.dll)inAssignment4.exe:0xC0000005:Accessviolationreadinglocation0xDDDDDDDD.这是我的代码:DynamicStringArray.h#pragmaonce#include"stdafx.h"#include#includeusingnamespacestd;classDynamicStringArray{public:DynamicStri

c++ - 为什么 shared_ptr 可以访问 ingoring "protected access right"

我用shared_ptr做了一些测试,我想不出下面的问题。我刚开始学习boost库。有谁能告诉我原因吗?#include#includeclassA{public:virtualvoidsing(){std::coutpa(newB());pa->sing();deletestatic_cast(pa.get());deletepa.get();//thislinehasaproblemerrorC2248:“A::~A”:can'taccessprotectedmemmber(declaredinclass“A")return0;}intmain(){foo();return0;}但

c++ - 使用 -fno-access-control 进行单元测试

我见过很多在单元测试时访问私有(private)变量的疯狂方法。我见过的最令人兴奋的是#defineprivatepublic。但是,我从未见过有人建议在编译器级别关闭私有(private)变量。我一直以为你做不到。我曾向许多开发人员提示说,如果您可以只告诉编译器为这个文件后退,单元测试会容易得多。然后我偶然发现了-fno-access-controlGCC编译器选项。这显然是单元测试的完美方式。你的原始源文件没有被修改,没有注入(inject)friend只是为了单元测试,没有用奇怪的预处理器魔法重新编译。编译单元测试时,只需轻按“无访问控制”开关即可。我错过了什么吗?这是我希望的单

c# - C#<->C++ DLLImport "Attempted to read or write protected memory."问题

我有一个C++dll,其中有一个函数,我试图从C#应用程序调用。这是C++头文件中的代码extern"C"_declspec(dllexport)intLabelStoringSSDsim(intdevNum,UCHARserial[40],UCHARwwn[40],UCHARConfigID[5],UCHARFrmRev[8],UCHARDevName[40],inteCode);这是C++源文件中的代码intLabelStoringSSDsim(intdevNum,UCHARserialLbl[40],UCHARwwnLbl[40],UCHARConfigID[5],UCHARFr