在Creating Named Shared Memory上使用MSDN的示例,我有一些问题(注意:变量名称内联是从超链接中的示例进程1引用的):
是否可以在进程1中将高长度消息(即szMsg.length()> 4000)复制到缓冲区(pBuf)?
创建文件映射对象所允许的最大缓冲区大小(BUF_SIZE)是多少?
如果是,用于创建映射对象的缓冲区大小与消息长度之间的关系是什么(即..在示例中,BUF_SIZE vs szMsg)
我问这些问题,因为当我尝试复制长度为>的消息时4000,尽管buf_size
从512增加到1024甚至更高,但它仍然存在访问冲突错误。
我是编码的新手。请向我解释如何创建一个可以容纳高长度消息的文件映射对象。
答案 0 :(得分:1)
如果写入超过BUF_SIZE
个字节,Windows不保证会发生什么。但实际上,文件映射将向上舍入到内存页面(恰好是4096)。因此,如果你指定一个"小"对于BUF_SIZE
的值,您将获得最多包含4096字节的消息 - 但如果您写入4097字节,则将可能会(*)获得访问冲突。
*:如果您运气不好,下一页已经映射到流程中,您将覆盖其他一些重要信息。
解决方案:您必须将BUF_SIZE
设置为至少与要发送的最大邮件一样大。
用于创建映射的缓冲区大小之间的关系是什么 对象与消息的长度。(即..在示例中,
BUF_SIZE
vsszMsg
)
答:BUFSIZE
必须大于或等于szMsg
。