求人看一小段C++代码

kannju 2011-07-22 09:25:53
1)size_t const kPageSize = sysconf(_SC_PAGESIZE);
2)size_t const kAlign = kPageSize > size_t(inBufferSize) ?kPageSize : size_t(inBufferSize);
3)mAllocSize = size_t(inNumBuffers) * inBufferSize + kAlign;
4)mAllocSize = (mAllocSize + kPageSize - 1) / kPageSize * kPageSize;
5)mAllocPtr = mmap(0, mAllocSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
6)mStartPtr = 0;
7)mStartPtr += (((char*)mAllocPtr - (char*)0) + kAlign - 1) /kAlign * kAlign;

这是一段关于内存申请分配的代码(分配inNumBuffers个大小为inBufferSize的连续内存空间),
第4句是为了页面对齐的话,第3句中加kAlign是为了什么?另外mStartPtr是指向什么位置?跟mAllocPtr是什么关系?

求解答谢谢
...全文
354 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2011-07-26
  • 打赏
  • 举报
回复
mAllocSize = size_t(inNumBuffers) * inBufferSize + kAlign;
加上kAlign是为了多分配kAlign大小的内存,这样在返回对齐指针的时候 能够保证对齐后的指针所指内存足够放下inNumBuffers个inBufferSize大小的元素。

mStartPtr += (((char*)mAllocPtr - (char*)0) + kAlign - 1) /kAlign * kAlign;

mStartPtr 就是返回按照 kAlign大小对齐的指针。
菜蚜 2011-07-26
  • 打赏
  • 举报
回复
飘过,菲菲
xcg020220 2011-07-23
  • 打赏
  • 举报
回复
看不懂!!!
kxywnljz 2011-07-23
  • 打赏
  • 举报
回复
?????小鸟飞一下
百事烟 2011-07-23
  • 打赏
  • 举报
回复
(char*)mAllocPtr - (char*)0

这个结果好像是个数值,头次见这么用法

mStartPtr的类型也不是指针
至善者善之敌 2011-07-22
  • 打赏
  • 举报
回复
第三句感觉就是多分配一个 inBufferSize或kPageSize

mStartPtr应该就是所谓的起始位置
ajaxpro ajax框架应当承认我这人实在算不上弄潮儿,Ajax 早已流行得一塌糊涂,我却始终没有来研究一下这个东东。上次做网站的时候,BOSS 就跟我讲过,可以参考一下 Ajax 的技术,我嘴上答应,心里却不是十分的在乎。究其原因,一来是我这人比较固步自封,二来起初确实也没太相信 Ajax 真有 BOSS 说的那么神奇。   转变是从昨天天始的,这一周在公司主要精力都是在用 C++ 写 framework,不得不承认它比较辛苦,细枝末节之处非常之烦,昨天下午呆着呆着就不想干活了,就开始四处游荡,正好看到我们自己也有项目已经成功应用了 Ajax,于是也就想看一看,无奈那帮家伙的开发文档是出奇的少,只好在网上找找资料,自己研究研究吧。   作为一个技术人员,我看到一项新技术,总是喜欢琢磨琢磨它内部是如何实现的。在对 Ajax 有了初步认识以后,自然想看看其内部机制,但是令我失望的是,至少介绍 Ajax 内部实现的文章少之又少,好容易找到一篇,却也只是简单列了列一些 javascript 代码,并且没什么解释,颇为郁闷。想想求人不如求己,况且自己研究的或许印象更深一些。于是找到了一个 AjaxPro,下来琢磨琢磨,只是对于 JavaScript 我实在知之甚少,不明白之处依然很多,不过还是想写出来,抛砖引玉,望高人们不吝指教。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧