草庐IT

placements-store

全部标签

C++ 内存模型 : do seq_cst loads synchronize with seq_cst stores?

在C++内存模型中,所有顺序一致的操作的所有加载和存储都有一个总顺序。我想知道这如何与具有其他内存顺序的操作交互,这些内存顺序在顺序一致的加载之前/之后排序。例如,考虑两个线程:std::atomica(0);std::atomicb(0);std::atomicc(0);////////////////ThreadT1////////////////Signalthatwe'vestartedrunning.a.store(1,std::memory_order_relaxed);//IfT2'sstoretoboccursbeforeourloadbelowinthetotal//

c++ - 我如何在这里使用 placement new ?

我有一block内存区域,将用于多个队列。比如我分配了1024字节的内存,需要两个队列。第一个队列将占用前512个字节,第二个队列将占用接下来的512个字节。但是,我的队列由C++类表示。使用placementnew运算符,我如何构造每个队列对象。以下做法是否正确?Queue*q1,*q2;void*mem=malloc(1024);*q1=new(mem)Queue;*q2=new(mem+512)Queue; 最佳答案 我会做以下事情:Queue*mem=static_cast(malloc(2*sizeof(Queue));Q

GPT store和Assistants API横空出世,AI Agent创业公司将何去何从?

Look!👀我们的大模型商业化落地产品📖更多AI资讯请👉🏾关注Free三天集训营助教在线为您火热答疑👩🏼‍🏫根据OpenAI发布的产品时间线,我们可以看到OpenAI在短短一年内迅速推出了多个重要的产品和功能,下面是OpenAI发布的主要产品和功能的时间线:2022年11月30日:OpenAI发布了ChatGPT,使用GPT-3.5语言技术,标志着交互式AI助手技术的一个重大突破。2023年2月7日:微软宣布将ChatGPT功能整合到Bing搜索引擎中,显示了AI和传统搜索技术的紧密结合。2023年3月1日:OpenAI推出了ChatGPTAPI,允许开发者将ChatGPT的强大功能集成到自己

c++ - std::async "store"如何成为任意异常?

我无法理解std::async怎么可能存储任何异常,而不仅仅是从std::exception派生的东西。我玩弄了下面的代码#include#include#includevoidf(){std::coutfut=std::async(std::launch::async,f);std::cout我异步启动f(),然后在f中抛出一个int。神奇的是,这个int被std::async返回的future捕获并存储。我知道可以在std::async中catch(...)异常,但后者如何在不知道异常类型的情况下存储它?异常不是从某个基类派生的(在这种情况下,可能可以通过一些Base::clone

c++ - 使用 placement new 在构造函数中调用构造函数

这几天很挣扎。问题是构造函数调用。我写了一段代码:#includeusingnamespacestd;classFoo{private:int_n;public:Foo(){Foo(5);}Foo(intn){_n=n;cout当我使用默认构造函数在外部构造一个Foo对象时:Foo*f=newFoo();我假设变量_n是5,然而,它不是。在Java中可以,但在C++中不行。此外,在VisualC++6sp6中,Foo(){this->Foo(5);}有效。然而,这个表达式被gcc/g++4拒绝。最后,我找到了解决办法。只需将默认构造函数更改为Foo(){Foo(5);}进入Foo(){

C++11:atomic<T>::store 和 atomic_store<T> 之间有什么区别

一个是模板类std::atomic的成员函数,一个是模板函数,看起来他们做的是同一件事。既然std是一个类库,为什么它同时提供类和非类版本,我认为是一样的操作?它们之间有什么真正的区别吗? 最佳答案 语义上没有区别。免费功能是为了实现与C11的源代码兼容性的尝试:#ifdef__cplusplus#include#define_Atomic(X)std::atomic#else#include#endif_Atomic(int)c;intget_c(void){returnatomic_load(&c);}

c++ - 我是否需要删除使用 new 和 placement 构造的对象

classFoo{//somememberpublic:intbar;}intmain(){char*buffer=newchar[100];Foo*f=new(buffer)Foo();//doihavetodeletef;//orisdelete[]buffer;//enough}当然,如果删除Foo对系统有一些重大影响,我必须删除它,但可以说它是一个简单的存储对象,我将其完全放在缓冲区内并且没有确实删除了一些其他东西的析构函数。我是否必须删除一个放置在新内部的对象是否足以删除缓冲区?如果我必须对缓冲区内的每个对象调用delete,为什么我必须这样做吗?我读到:what-uses-

c++ - malloc 和堆 : extra memory for storing the size and linked list information?

我有一个关于heap和malloc的简单问题:当我们使用malloc分配一些内存空间时,如下所示:int*p;p=(int*)malloc(10*sizeof(int));它实际上在堆中分配了10个单词。但是,我的问题是:实际使用的内存空间真的是10个字?或者还有其他额外的空间需要存储内存大小的值?或者,甚至,因为堆的结构是链表,是否有其他内存空间用于存储指向堆中列表的下一个节点的地址? 最佳答案 它完全依赖于实现。a)它可以在每个分配的节点之前有几个字节,其中包含节点的大小、指向下一个节点的指针,可能还有前一个节点指针和节点类型。

c++ - std::string 和 placement new

我发现了这个在C++中使用placementnew的例子,它对我来说没有意义。我认为这段代码容易出现异常,因为可能会使用比分配的内存更多的内存。char*buf=newchar[sizeof(string)];string*p=new(buf)string("hi");如果“string”是C++STD::string类,那么buf将得到一个分配空字符串对象的大小(我的编译器给出了28个字节),然后我看到它的方式如果你用更多的字符初始化你的字符串你可能超过分配的内存。例如:string*p=new(buf)string("hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

c++ - std::atomic_store 和 std::atomic_exchange 不交换

根据en.cppreference.com,std::atomic_exchange和std::atomic_store等价于线程安全的std::swap。但这不是我使用g++或clang++得到的行为。Problemliveoncoliru.(见下文)它虽然打印了这个:std::atomic_storea:0x1ed2c300b:0x1ed2c501a:0x1ed2c501b:0x1ed2c501std::atomic_exchangea:0x1ed2c500b:0x1ed2c301a:0x1ed2c301b:0x1ed2c301这是为什么?难道我做错了什么?我是否误读了文档?代码l