草庐IT

延时分配

全部标签

c++ - 从 C++ 中的函数返回动态分配的缓冲区的最佳模式是什么?

我正在重构一些旧代码。有一个C风格的函数是这样工作的:(显然我在这里简化了它)intLoadData(char**buf1,int*buf1Len,char**buf2,int*buf2Len){*buf1Len=DetermineLength1();*buf1=(char*)malloc(*buf1Len);//Fillbuf1*buf2Len=DetermineLength2();*buf2=(char*)malloc(*buf2Len);//Fillbuf2intresult=0;//OrsomeotherINTdependingofresultreturnresult;}现在,

c++ - 由于分配,c++中的指针算术

我创建了一个类,其中包含3个相同类型的元素(类似std::pair>)。而且我准备使用for(auto&var:t)但我不知道我这样做是否安全。templateclassTroika{public:Troika(constT&f,constT&s,constT&t):first(f),second(s),third(t){}Troika(){}Tfirst;Tsecond;Tthird;typedefT*iterator;typedefconstT*const_iterator;iteratorbegin(){return&first;}const_iteratorbegin()con

c++ - 指针分配与正常声明

有时我会在各种C++程序中看到对象的声明和使用方式如下:object*obj=newobject;obj->action();obj->moreAction();//etc...这样做有什么好处,而不是简单地做:objectobj;obj.action();obj.moreAction();//etc 最佳答案 是的-您可以将指针存储在容器中或从函数中返回它,并且当指针超出范围时对象不会被销毁。使用指针避免不必要的对象复制,促进可选对象的创建,用于自定义对象生命周期管理,用于创建复杂的图形结构,对于上述的组合。这不是免费的——当你不

c++ - 为什么指针分配的内存在函数之后仍然存在,而不是数组?

所以,我在C++书中看到的基本文本输入函数的上下文中问这个问题:char*getString(){chartemp[80];cin>>temp;char*pn=newchar[strlen(temp+1)];strcpy(pn,temp);returnpn;}因此temp声明了一个包含80个字符的数组,这是一个自动变量,一旦getString()返回,其内存将被释放。有人建议,如果您出于某种原因返回temp,它在函数外部的使用将不可靠,因为一旦函数完成,该内存就会被释放。但是由于我也在相同的上下文中声明了pn,为什么它的内存没有被丢弃呢? 最佳答案

c++ - 是否可以将一个函数加载到一些分配的内存中并从那里运行它?

我正在搞乱一些进程间通信的东西,我很好奇是否可以将一个函数复制到一些共享内存中并从任何一个进程从那里运行它。类似于:memcpy(shared_memory_address,&func,&func+sizeof(func));我知道你不能接受函数的大小,但我突然想到了这一点。 最佳答案 那很有趣。但看起来你可以。虽然我永远不会这样做:在运行Windows7的lenovo:T61p上编译:使用g++4.3.4我会注意到某些类型的硬件会阻止这种情况,因为您只能从硬件内存映射文件中标记为只读的特定内存区域(程序区域)执行代码(以防止自修改

window 如何为微软商城安装的应用分配启动快捷键(支持 win 快捷键)。可以借助开源的 AutoHotkey 实现

需求:为WindowsTerminal配置快捷键写完这篇文章后,才发现windowsternimal本身支持Win+`快捷键😨。开始之前,先找到对应程序在开始解决需求之前,得先获取到程序的路径,可以选择实际路径或者为其创建一个快捷方式。方式一:创建快捷方式:通过win+r运行shell:AppsFolder可以打开应用程序列表,微软商城安装的应用都可在里面找到找到需要的程序,在这里我们要找的是“ternimal”程序将其拖到桌面或其他任意位置即可创建快捷方式。(tips:拖拽文件时按下alt键可以更方便地创建快捷链接)方式二:获取实际路径打开pwsh(powershell)运行explorer

c++ - 我可以通过使用多线程更快地分配内存吗?

如果我创建一个保留1kb整数数组int[1024]的循环,并且我希望它分配10000个数组,我可以通过从多个线程运行内存分配来使其更快吗?我希望它们在堆中。假设我有一个多核处理器来完成这项工作。我已经试过了,但是它降低了性能。我只是想知道,我是不是编写了错误的代码,还是我对内存分配一无所知?答案是否取决于操作系统?如果可以,请告诉我它在不同平台上的工作原理。编辑:整数数组分配循环只是一个简化的例子。不要费心告诉我如何改进它。 最佳答案 这取决于很多事情,但主要是:操作系统你正在使用的malloc的实现操作系统负责分配您的进程可以访问

C++ 字符串/容器分配

这对于C++非菜鸟来说可能是显而易见的,但它让我有点难过——一个类的字符串成员是否在该类中分配了可变数量的空间?或者它只是在内部分配一个指向内存中其他空间的指针?例如。在这个例子中:classParent{public:vectorChildren;}classChild{public:stringName;}如果我创建一个“newParent()”并添加一些具有不同长度字符串的子项,它是如何在堆上分配的?Parent是4个字节,Child是4个字节(或者任何指针大小,加上固定大小的内部数据),然后是堆上其他地方的随机字符串堆?还是全部捆绑在内存中?我想一般来说,容器类型本身总是固定大

c++ - 为什么从 DLL 内部分配的内存在 FreeLibrary() 之后变得无效?

我今天遇到了这个错误,原来是因为我在调用FreeLibrary()后使用了一个字符串从我的DLL中分配。这是一个重现崩溃的简单示例。这进入DLL:voiddllFunc(char**output){*output=strdup("Hello");//strdupusesmalloc}这是在加载DLL的EXE中:voidexeFunc(){char*output;dllFunc(&output);std::strings1=output;//Thissucceeds.FreeLibrary(dll);std::strings2=output;//Thiscrasheswithaccess

c++ - 如何解决分配和释放不匹配的错误?

对于带有deletecname;的行,Cppcheck报告错误“分配和解除分配不匹配:cname”。我看不出使用我的代码版本有什么问题-它看起来可以正常工作。我的代码错了吗?我如何解决它?使用我的代码会有什么后果?if(lenght!=0){char*cname=newchar[lenght+1];inbin.read(reinterpret_cast(cname),lenght);cname[lenght]='\0';*ptr_string=cname;deletecname;} 最佳答案 是的,当您使用new…[…]语法分配数组