在共享缓冲区内存中创建 ::std::string 对象
Creating an ::std::string object in the shared buffer memory
我在堆内存有限的嵌入式应用程序中使用Google protobuf。我目前正在尝试使应用程序仅将动态分配用作最后的手段。为此,我有一些共享缓冲区,您可以在其上创建所有原始消息或其中的大部分消息。一切似乎都正常,除了原型消息需要::std::string
参数的情况。
我理解::std::string
构造函数描述的方式是,它将创建我提供的数据的副本。例如,此构造函数:
s = new(sharedBufferAddress) ::std::string(mApn, mApnSize);
哪里
char mApn[APN_MAX_SIZE];
int8_t mApnSize;
将创建一个位于共享缓冲区地址的对象,但内部的数据将被复制到堆上分配的缓冲区上。
问题是是否有某种方法可以让c_str()
函数返回的指针指向某个指定地址。
你无法做太多破解std::string
的实现。所有尝试都会做一些非法的事情,并可能导致未定义的行为。
一种选择是发展Protobuf的自定义实现或对库存Protobuf的自定义修改。
另一种选择是使用现有的自定义实现。例如,芬兰程序员Petteri Aimonen在C语言中实现了Protobuf实现Nanopb用于嵌入式开发,并在zlib许可下发布。这可能比嵌入式项目中的自定义修改库存 Protobuf 更有用,因为 C 和 C++ 可以很好地协同工作。
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 重载 + 自己的类和 std::string 的运算符
- 如何使用 std::string 作为 QHash 的键?
- 将日语 wstring 转换为 std::string
- 可以从std::string继承以提供类型一致性吗
- 构造函数采用std::string_view与std::string并移动
- 在共享缓冲区内存中创建 ::std::string 对象
- std::string.size() 未知行为
- Valgrind 在 std::string::swap 中报告 SIGILL