草庐IT

memory-address

全部标签

c++ - 如何正确使用malloc和free memory?

我想知道使用malloc和free的正确/标准方法是什么。free后是否需要设置指针为NULL?基本上,以下两种方式中哪一种是正确的?double*myPtr=(double*)malloc(sizeof(double)*5);.....free(myPtr);或double*myPtr=(double*)malloc(sizeof(double)*5);.....free(myPtr);myPtr=NULL;或者应该是其他方式使用malloc和free?谢谢。 最佳答案 两者都很好。唯一的区别是,如果您第二次尝试释放myPtr,前

c++ - 未命中断点 - "the module did not load at the default load address"

我正在尝试调试CPPUnitTests,断点设置在作为待测试DLL(C++非托管dll)一部分的文件中。我将CPPunit测试程序进程附加到打开项目的visualstudioIDE,处于native模式(也尝试过托管+native),然后运行测试,但断点根本没有命中。断点似乎没问题(全红点)。我在DebugBuild中构建了所有必要的DLL。我去Debug->Windows->Modules检查测试程序进程是否加载了我正在调试的DLL,它确实加载了,并且SYmbol文件也被加载了,但是DLL的名称中有一个感叹号和当我将鼠标悬停在它上面时,它说“模块没有在默认加载地址加载”。我该如何解决

c++ - Memory SPIKE - boost ASIO 异步读取

写了一个只从客户端读取数据的服务器:使用boost::array缓冲区启动服务器,系统监视器显示1MB的使用量。1.)只需执行一个async_read_some并执行一个handleRead,我会在其中再次调用asyncRead函数。voidasyncRead(){m_socket->async_read_some(boost::asio::buffer(m_readBuffer,READ_BLOCK_SIZE),m_strand->wrap(boost::bind(&ConnectionHandler::handleRead,shared_from_this(),boost::asi

c++ - 线程构造的性能成本 : missed optimisations and memory allocation

我们遇到了一种奇怪的现象,其中包含头文件会导致某些内存分配密集型工作负载的性能下降5-10%。这个头文件将一个线程池声明为一个全局变量。该线程池从未在应用程序中以任何容量(还)使用过。也就是说,除了在程序启动时创建这个静态线程池外,应用程序完全是单线程的。一旦标题被移除,性能损失就会消失。从一些研究来看,由于某些编译器优化不再可能,多线程应用程序似乎会导致一些性能损失。每当以任何形式或容量实例化与线程相关的构造时,是否有可能关闭此类优化?或者,由于在执行大量内存分配时性能损失似乎最为明显,编译器是否有可能在编译/链接阶段意识到线程构造已实例化,因此它切换到线程安全内存分配器?这发生在L

c++ - 在 C++ 中使用它在内存中的起始地址编辑字符串

我真的希望以前没有人问过这个问题,但我的谷歌搜索没有任何结果,所以我想我会问的。我正在编写一个小脚本,我将一个DLL注入(inject)到游戏中并编辑一个特定的字符串,该字符串在特定事件发生时显示。我找到了这个字符串在内存中的位置,并编写了一个基本的sigscanning函数来在运行时找到它。我现在的问题是,给定起始地址,我如何/可以用我自己的特定字符串替换这个字符串?例如,字符串是“我喜欢煎饼”,我想将其替换为“煎饼太糟糕了,华夫饼最好吃!”。一个人会怎么做呢?谢谢!哦,是的,如果重要的话,源代码中的字符串是一个常量字符。我很确定它不会,但添加该信息也无妨!

C++0x : memory ordering

当前C++0xdraft在第29.3.9节和第29.3.10节第1111-1112页中说明,在以下示例中://Thread1r1=y.load(memory_order_relaxed);x.store(1,memory_order_relaxed);//Thread2r2=x.load(memory_order_relaxed);y.store(1,memory_order_relaxed);结果r1=r2=1是可能的,因为每个线程的操作都放宽了并且指向不相关的地址。现在我的问题是关于以下(类似)示例的可能结果://Thread1r1=y.load(memory_order_acqu

c++ - C3859 : Virtual memory range for PCH exceeded

我在编译(编辑:抱歉,我在这里没有说清楚:我实际上是指“重建”)我的混合模式项目时不时(不是每次)收到此错误消息。VisualStudio告诉我“使用‘-Zm114’或更高的命令行选项重新编译”。原则上没问题,我照VS说的做。但是目前,这有两个问题:为什么它不会在我进行重建时每次发生?如果我理解正确,编译器在编译我的项目时内存不足。因此,如果我进行重建,清除所有以前的工作,如果我不做任何更改,下次它不应该也用完内存吗?为了安全起见,我已经在这个项目的所有配置中为Zm(即Zm120)指定了120的值。为什么我会收到带有此较低值的错误消息?还是建议值114只是VS的胡乱猜测?

c++ - std::memory_order_relaxed 相对于相同原子变量的原子性

关于内存顺序的cppreference文档说Typicaluseforrelaxedmemoryorderingisincrementingcounters,suchasthereferencecountersofstd::shared_ptr,sincethisonlyrequiresatomicity,butnotorderingorsynchronization(notethatdecrementingtheshared_ptrcountersrequiresacquire-releasesynchronizationwiththedestructor)这是否意味着宽松的内存排序

c++ - POD 结构(相同类型的成员): are members in contiguous memory locations?

给定templatestructVector3d{Tx,y,z;};假设x、y和z位于连续的内存位置是否安全?对于T=float和T=double至少可以安全地假设吗?如果不能,是否有可能以跨平台的方式实现?注意:只要x、y、z是连续的,我不介意在z之后填充 最佳答案 Isitsafetoassumethatx,y,andzareincontiguousmemorylocations?从技术上讲,语言没有这样的保证。另一方面,它们也没有必要不连续,实际上它们很可能是连续的。Ifnotisitpossibletoenforceinac

c++ - C++中类变量声明的查询

我有一个类来表示float的3Dvector:classVector3D{public:floatx,y,z;float*constdata;Vector3D():x(0.0),y(0.0),z(0.0),data(&x){}}我的问题是:x、y和z是否会在内存中按顺序分配,以便我可以将x的地址分配给数据,然后对数据使用下标运算符以将vector组件作为数组访问?例如,有时我可能想直接访问vector分量:Vector3Dvec;vec.x=42.0;vec.y=42.0;vec.z=42.0;有时我可能想通过偏移访问它们:Vector3Dvec;for(inti=3;i--;)vec