gpt4 book ai didi

c++ - 在共享缓冲区内存中创建一个::std::string 对象

转载 作者:太空狗 更新时间:2023-10-29 23:11:01 25 4
gpt4 key购买 nike

我在堆内存有限的嵌入式应用程序中使用 Google protobuf。我目前正试图让应用程序仅作为最后的手段使用动态分配。为此,我有一些共享缓冲区,我在其上创建所有原型(prototype)消息或其中的大部分。一切似乎都很好,除了原型(prototype)消息需要 ::std::string 参数的情况。

我对 ::std::string 构造函数描述的理解是,它将创建我提供的数据的拷贝。例如这个构造函数:

s = new(sharedBufferAddress) ::std::string(mApn, mApnSize);

在哪里

char                        mApn[APN_MAX_SIZE];
int8_t mApnSize;

将创建一个位于 sharedBufferAddress 的对象,但其中的数据将被复制到堆上分配的缓冲区中。

问题是是否有某种方法可以将 c_str() 函数返回的指针指向某个指定地址。

最佳答案

你无法对 std::string 的实现进行破解。所有尝试都会做一些非法的事情,并可能导致未定义的行为。

一种选择是发展 Protobuf 的自定义实现或对现有 Protobuf 进行自定义修改。

其他选项是使用现有的自定义实现。例如芬兰程序员 Petteri Aimonen 已经实现了 Protobuf 实现 Nanopb在 C 中用于嵌入式开发,并在 zlib 许可下发布。这可能比嵌入式项目中自定义修改的库存 Protobuf 更有用,因为 C 和 C++ 可以很好地协同工作。

关于c++ - 在共享缓冲区内存中创建一个::std::string 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52591397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com