对于网络协议实现,我想利用 newMemory和Spanclasses 在通过struct.
我有以下人为的例子:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Data
{
public int IntValue;
public short ShortValue;
public byte ByteValue;
}
static void Prepare()
{
var buffer = new byte[1024];
var dSpan = MemoryMarshal.Cast<byte, Data>(buffer);
ref var d = ref dSpan[0];
d.ByteValue = 1;
d.ShortValue = (2 << 8) + 3;
d.IntValue = (4 << 24) + (5 << 16) + (6 << 8) + 7;
}
Run Code Online (Sandbox Code Playgroud)
结果是buffer充满了7, 6, 5, …
在我的域名中,我有一个Transport可以Endpoints在某些位置访问的内容,因此我有以下内容:
public class Transport
{
public IDictionary<Endpoint, int> AccessPointPosition { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我试图AccessPointPosition通过组合HasMany和映射AsMap,但我没有成功找到任何通过Fluent NHibernate配置的东西.
我忽略了什么吗?这不可能吗?有关于这个主题的文件吗?
我有一个方法返回一个新的映射指针,后来消耗.在使用地图的地方,我有以下代码:
void Updater::set_data(map<string, string> * data)
{
if (this->data != NULL)
{
delete this->data;
}
this->data = data;
}
Run Code Online (Sandbox Code Playgroud)
只要应用程序正在运行,此使用者就会运行.
但是,我的应用程序正在泄漏内存并且Valgrind报告它正在泄漏(1个块中的600个(48个直接,552个间接)字节在丢失记录中明确丢失...)在构造映射的行中:
map<string, string> * values = new map<string, string>();
Run Code Online (Sandbox Code Playgroud)
我做错了什么来摆脱地图(并释放内存)?我没有太多的C++经验,所以我猜这是一些初学者的错误,但我花了大量的时间试图计算它可能是什么.
编辑 我只有2个更新程序运行(或者如果我选择了1,但总是预定义的固定数量),并且地图始终包含类似的数据,通常甚至与以前完全相同.