在共享缓冲存储器中创建:: std :: string对象

时间:2018-10-01 12:40:56

标签: c++ string c++11 embedded

我在堆内存有限的嵌入式应用程序中使用Google protobuf。我目前正在尝试使应用程序仅将动态分配用作最后的选择。为此,我有一些共享缓冲区,可以在其中创建所有原始消息或大多数原始消息。似乎一切正常,除了原始消息需要一个::std::string参数的情况。

我理解::std::string构造函数描述的方式是,它将创建我提供的数据的副本。例如,此构造函数:

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

其中

char                        mApn[APN_MAX_SIZE];
int8_t                      mApnSize;

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

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

1 个答案:

答案 0 :(得分:0)

您无法做很多事情来破解std::string的实现。所有尝试都会做非法的事情,并可能导致不确定的行为。

一种选择是发展Protobuf的自定义实现或股票Protobuf的自定义修改。

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

相关问题