首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >p7zip API设计

p7zip API设计
EN

Stack Overflow用户
提问于 2016-02-24 03:37:45
回答 1查看 121关注 0票数 0

为什么maxCheckStartPosition被设计成这里的指针呢?

这个变量被用作搜索限制,我不认为它在Open()期间会被更改的任何原因。

此外,我还对整个库进行了打招呼,我看不到任何Archive接受该变量的所有权/更改。

这个设计决定在我看来真的很奇怪。

代码语言:javascript
复制
p7zip_9.20.1/CPP/7zip/Archive/IArchive.h:

STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openArchiveCallback) x; \
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-24 03:53:37

我看不出有什么理由在Open()期间改变它。

除了找不到任何原因之外,从合同上看,如果是这样的话,这将是一种未定义的行为。它的标签是const (写成这样,这是指的东西是康斯特.而不是指针)。

为什么maxCheckStartPosition被设计成这里的指针呢?

不知道具体动机:

  • 作为一个指针,允许NULL,它是可选的,而如果非空的话,仍然有一个可用的完整范围的UInt64。这避免了需要选择一个“魔术数字”,这意味着没有maxCheckStartPosition。
  • 在32位架构中,指针意味着堆栈上传递的参数中的32位,而64位则可能有更好或更坏的原因。有些人可能试图对被推的字节进行微观优化,而另一些时候,这可能是另一个奇怪的原因,为什么你只知道如何将指针大小的东西推到堆栈(类似于FFI的东西,或者什么东西)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35592771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档