来自 2 个指针的组合缓冲区,无需复制

Combined buffer from 2 pointers without copy

本文关键字:复制 缓冲区 组合 指针 来自      更新时间:2023-10-16

我想从 2 个指针制作组合缓冲区而无需任何复制。

示例:顶部和底部是所有准备好分配的缓冲区,其中包含只读数据:

uchar top[10]; uchar bottom[10];

我需要这样的东西:

struct Buffer { uchar * top, * bottom; };
Buffer buffer; buffer.top = & top; buffer.bottom = & bottom;

然后使用缓冲区作为单个数组:

process( & buffer, size20 );

进程是来自某些库的函数:

void process( uchar * buffer, int size );

c/c++ 中是否有一些方法可以做到这一点?

无法定义Buffer,以便分配两个不同的数据字符串以端到端结束。您必须将其定义为

struct Buffer { uchar top[10], bottom[10]; };

然后,您必须使用直接副本设置这些值。

如果进程如下所示:

process(uchar* buf, size_t n);

您可以创建一个任意长的缓冲区 (20?),如下所示:

uchar buffer[20];

然后创建顶部和底部作为指针,指向"缓冲区"的上半部分和下半部分,例如:

uchar* top = buffer;
uchar* bot = buffer + 10;

或:

uchar* top = &buffer[0];
uchar* bot = &buffer[10];

现在可以调用进程:

process(buffer, 20);

您还可以执行以下操作:

struct buffer{
uchar top[10];
uchar bot[10];
};
buffer buf;
buf.top = ....
buf.bot = ....
process((uchar*)&buf, 20);