草庐IT

memory - 字的大小和寻址

coder 2023-06-04 原文

我正在刷新自己的内存信息,但我对单词的大小感到困惑。在我的理解中,Word 不是一个通用定义的大小,而是由特定系统定义的大小(以字节数计)。

根据维基百科:

Hence, a processor with 32-bit memory addresses can directly access 4 GiB of byte-addressable memory.

这是否意味着 32 位处理器可以处理 4,294,967,295 个? 32 位 Windows 的 RAM 限制为 4GB,但阅读单词的含义让我感到疑惑。 Windows 中的每个字是否等于 1 个字节?一个字的大小是否只是更大的字节数,而 32 位处理器能够处理 8GB、10GB、12GB 甚至更多的内存?

最佳答案

Does that mean that a 32-bit processor can address 4,294,967,295 Words?

这取决于 CPU 以及您如何看待它。

有些 CPU 无法处理小于一个字的任何内容。 16 位德州仪器数字信号处理器就是一个很好的例子。它们的 C/C++ char (AKA byte)、shortint 类型都是相同的大小,16位。这是可以用唯一地址(指针)寻址的最小内存单元,同时也是机器字。由于这些处理器上的数据地址/指针是 16 位的,因此它们最多可以寻址数据存储器中的 216 个 16 位字。

现在,如果您回到 32 位操作模式的 x86 CPU,情况会有所不同。内存的最小可寻址单元是 8 位字节,最大的是 32 位字(机器字)。地址和指针也是 32 位的(如果我们忽略分段和页面转换)。这让我们有 232 个唯一的内存地址。而且,使用它们,您最多可以访问 232 8 位字节的内存。但是,您可以使用 232 个唯一地址来寻址多少个 32 位字?答案取决于您是否想要不重叠或重叠的单词。你看,x86 CPU 可以访问任何地址的 32 位内存单元,而不仅仅是 4 字节的倍数。

在 x86 上您不仅限于此:

  0 1 2 3 4 5 6 7  <- address
  \word/  \word/

这些都是 x86 上 32 位字访问的有效地址:

  0 1 2 3 4 5 6 7  <- address
  \word/  | | | |
    \word/  / | |
      \word/  / |
        \word/  /
          \word/
            ...

那么,在 x86 上,您可以使用 232 个唯一地址来寻址多少个 32 位字?如果您说的是所有唯一可寻址和重叠的,那就是其中的 232。如果,OTOH,您正在谈论所有唯一可寻址且不重叠的,那就是其中的 230

OTOH,如果您的 32 位 CPU 使用非 32 位地址,则总数会有所不同。

关于memory - 字的大小和寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735567/

有关memory - 字的大小和寻址的更多相关文章

  1. ruby - Ruby 中的大指数? - 2

    我只是在做一些与大学相关的Diffie-Hellman练习,并尝试使用ruby​​。遗憾的是,ruby似乎无法处理大指数:warning:ina**b,bmaybetoobigNaN[...]有什么办法吗?(例如,特殊的数学课或类似的东西?)附注这是有问题的代码:generator=7789prime=1017473alice_secret=415492bob_secret=725193putsfrom_alice_to_bob=(generator**alice_secret)%primeputsfrom_bob_to_alice=(generator**bob_secret)%pr

  2. ruby-on-rails - 用于验证仅包含字符(非特殊字符)、空格和数字的字符串的正则表达式 - 2

    我正在使用RubyonRails3.0.9,我想验证一个只能包含字符(不是特殊字符-不区分大小写)、空格和数字的字符串。在我的验证码中我有:validates:name,:presence=>true,:format=>{:with=>regex}#HereIshouldsetthe'regex'我应该如何声明正则表达式? 最佳答案 有几种方法可以做到这一点。如果你只想允许ASCII单词字符(没有像Ê这样的重音字符或来自其他字母表的字母,如Ӕ或ל),使用这个:/^[a-zA-Z\d\s]*$/如果您只想为Ruby1.8.7允许来自其

  3. ruby - 使用 WWW :Mechanize to download a file to disk without loading it all in memory first - 2

    我正在使用Mechanize来简化某些文件的下载。目前我的脚本使用以下行来实际下载文件...agent.get('http://example.com/foo').save_as'a_file_name'然而,这会将完整的文件下载到内存中,然后再将其转储到磁盘。你如何绕过这种行为,直接下载到磁盘?如果我需要使用WWW:Mechanize以外的东西,那么我将如何使用WWW:Mechanize的cookies呢? 最佳答案 您真正想要的是Mechanize::Downloadhttp://mechanize.rubyforge.org/

  4. ruby-on-rails - 将 USD "money"转换为数字的 Ruby 字符串 - 2

    目前是否有gem能够获取字符串(为此目的全部以美元为单位)并将它们转换为数字?一些例子是:“$7,600”会变成7600“5500”会变成5500我知道在“5500”示例中我可以只执行“5500”.to_i,但是导入的电子表格不一致,有些包含逗号和美元符号,有些则不包含。在Ruby中有全面处理这个问题的合适方法吗?我已经尝试过像money_string.scan(/\d/).join这样的东西似乎没问题,只是担心我会遇到我还没有发现的边缘情况,比如作为小数位。 最佳答案 为什么不在调用.to_i之前删除所有非数字字符例子:"$7,6

  5. ruby-on-rails - rails Assets 管道 "Cannot allocate memory - nodejs" - 2

    我们刚刚从Rails3.0.7升级到Rails3.2.5,并为暂存服务器即时使用Assets管道编译,但有时我们会遇到这个异常!Showing/var/rails/appname/app/views/common/_my_partial.html.hamlwhereline#raised:Cannotallocatememory-nodejs/tmp/execjs20120613-17090-thoc8f.js2>&1Extractedsource(aroundline#):Traceoftemplateinclusion:app/views/layouts/application.h

  6. ruby - 生成带有小写字母和数字的唯一随机字符串 - 2

    我如何修复此代码,使其生成唯一的随机小写字母和数字?api_string=(0...32).map{65.+(rand(25)).chr}.join目前,它只生成字母。 最佳答案 如果您使用的是ruby​​1.9.2,则可以使用SecureRandom:irb(main):001:0>require'securerandom'=>trueirb(main):002:0>SecureRandom.hex(13)=>"5bbf194bcf8740ae8c9ce49e97"irb(main):003:0>SecureRandom.hex(

  7. ruby - Rubocop 25 行 block 大小和 RSpec 测试 - 2

    典型的RSpec单元测试广泛使用嵌套的Rubyblock来构建代码并利用DSL“魔法”让规范像BDD语句一样阅读:describeFoodocontext"withabar"dobefore:eachdosubject{Foo.new().add_bar}endit"lookslikeabaz"doexpect#etc在理想的规范中,每个示例都可以相对简短和精确。然而,外部block增长到100行以上似乎很常见,因为RSpec结构以这种方式工作,并且没有采用很多规范示例,每个示例可能有几行特定设置,以获取describe与所描述主题的代码大小相同或更大的block。Rubocop最近的

  8. ARM异常处理(3):Bus faults、Memory management faults、Usage faults、Hard faults详解 - 2

    之前介绍了了ARM异常处理(1):异常类型、优先级分组和异常向量表,里面有很多异常类型,其中有几个异常在错误处理中非常有用:文章目录1BusFault2MemoryManagementFault3Uagefaults4HardFaults1BusFault当在AHB接口上传输期间收到错误响应时,就会产生Busfault。它可能发生在以下几个阶段:指令预取阶段,通常称为prefetchabort数据读/写阶段,通常称为dataabort在Cortex-M3中,出现下面几种情况也会产生Busfault:堆栈在中断处理的开始处PUSH,称为stackingerror堆栈在中断处理的结束处POP,称为

  9. ruby - 生成所有字母和数字的数组 - 2

    使用ruby​​,是否可以轻松地制作字母表中的每个字母和0-9的数组? 最佳答案 [*('a'..'z'),*('0'..'9')]#doesn'tworkinRuby1.8或('a'..'z').to_a+('0'..'9').to_a或(0...36).map{|i|i.to_s36}(Integer#to_s方法将数字转换为在所需的numeralsystem中表示它的字符串) 关于ruby-生成所有字母和数字的数组,我们在StackOverflow上找到一个类似的问题:

  10. javascript - 与用户操作交互的模态弹出窗口,如用户设置的最大化、最小化、关闭、调整大小和可拖动 - 2

    我需要与用户操作交互的模态弹出窗口,如下图所示。但是这个模态弹出窗口应该是纯java脚本。严禁使用JQuery或JQuery插件。期待您的来信。提前致谢。 最佳答案 这里我分享一些插件,基本上都是用Jquery和Javascript创建的。无论您在纯JavaScript中寻找什么,都可以使用http://alpha.jspanel.de/media/demos/nojquery/index.php另一个是使用Jquery创建的。是https://lobianijs.com/site/lobipanel#examples使用第一个选项

随机推荐