栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

搜狗workflow——C++并行计算与异步网络引擎 序列化与反序列化 代码分析(七)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

搜狗workflow——C++并行计算与异步网络引擎 序列化与反序列化 代码分析(七)

2021SC@SDUSC

目录

一.前置知识点

1.malloc()函数:动态分配内存空间

二.关键代码分析


一.前置知识点

1.malloc()函数:动态分配内存空间

malloc()函数是在stdlib.h库里的一个函数。malloc() 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。

如果希望在分配内存的同时进行初始化,可以使用 calloc() 函数的~

malloc()函数的返回值是:分配成功返回指向该内存的地址,失败则返回 NULL。

malloc()函数的返回值类型是 void *,void 并不是说没有返回值或者返回空指针,而是返回的指针类型未知。

二.关键代码分析

int TutorialMessage::set_message_body(const void *body, size_t size)

{

void *p = malloc(size);

if (!p)

return -1;

memcpy(p, body, size);

free(this->body);

this->body = (char *)p;

this->body_size = size;

this->head_received = 4;

this->body_received = size;

return 0;

}

//1.memcpy函数使得body中的size个字节复制给p;

2.释放掉this指向body之前的值,从现在开始,this指向body的值是(char *)p,大小为size;this指向head_received的值为4,指向body_received的值为size。

TutorialMessage::TutorialMessage(TutorialMessage&& msg)

{

//msg是一个字符串

*(ProtocolMessage *)this = std::move(msg);

memcpy(this->head, msg.head, 4);

this->head_received = msg.head_received;

this->body = msg.body;

this->body_received = msg.body_received;

this->body_size = msg.body_size;

msg.head_received = 0;

msg.body = NULL;

msg.body_size = 0;

}

//1.memcpy函数使得msg.head中的4字节长度的值复制给this->head。首先先保证读取4字节的head完整,再读取body。因此是先使 msg.head_received的值赋给this->head_received;再使 msg.body的值赋给this->body。

读取完成后使msg.head_received,msg.body_size归零,msg.body为空。

TutorialMessage& TutorialMessage::operator = (TutorialMessage&& msg)

{

if (&msg != this)

{

this->size_limit = msg.size_limit;

msg.size_limit = (size_t)-1;

memcpy(this->head, msg.head, 4);

this->head_received = msg.head_received;

this->body = msg.body;

this->body_received = msg.body_received;

this->body_size = msg.body_size;

msg.head_received = 0;

msg.body = NULL;

msg.body_size = 0;

}

return *this;

}

//如果this不指向msg的地址,那就使this->size_limit指向msg.size_limit后,msg.size_limit减少一位,重复TutorialMessage::TutorialMessage(TutorialMessage&& msg)中的实现。

}

---------------------------------------------------------------------------------------------------------------------------------

参考资料:

tutorial/tutorial-10-user_defined_protocol/message.cc · 搜狗开源/workflow - Gitee.com

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512078.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号