memory - 计算机中的一个内存位置存储多少数据?

标签 memory integer memory-address

假设是 32 位操作系统。

  1. 计算机中的一个内存位置存储多少数据?

  2. 计算机内存存储的基本单位是什么?

  3. 例如存储一个整数需要什么内存地址? 如果基本单位是 BYTE,则整数需要 4 个字节。 因此,如果我需要存储一个字节,那么如果开始将第一个字节放入内存位置 0001 那么我的整数会在 0003 内存位置结束吗?

如有错误请指正?

最佳答案

最常见的现代系统就是您所说的“字节可访问”。 这意味着:

  1. 一个内存位置存储 1 个字节(8 位)。
  2. 内存的基本存储单位是1个字节。
  3. 如果您需要存储 4 个字节,并将第一个字节放在 0001,最后一个字节将在 0004。即 0001、0002、0003 和 0004 各有一个字节。

请记住,系统有不同的 CPU word大小(32 位系统具有 32 位或 4 字节字),内存通常按字节寻址。 CPU 在算术中使用的寄存器是 4 个字节,但程序员用于数据存储的“内存”是以字节为单位寻址的。

在 x86 系统上,许多内存访问指令要求内存中的值与可被字长整除的地址“对齐”。例如0x???0, 0x???4, 0x???8, 0x???C.因此,在大多数系统上都不会在 0001 处存储一个 int。非数字数据类型通常可以在任何地址找到。

参见维基百科:Alignment Word (Computing) Memory Address

关于memory - 计算机中的一个内存位置存储多少数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5215495/

相关文章:

c++ - 指针索引 : Getting Unexpected Values

java - Java数据结构的空间复杂度

php - 为什么 php 数组使用较新的 php 版本变慢,以及如何解决这个问题?

c - 如何获取字符串的第 n 个字符?

c++ - 为什么字符 'a' 没有自动转换为 97?

android - 如何将整数从一个 Activity 传递到另一个 Activity ?

Groovy - 设置您自己的整数属性

pointers - 为什么指向int的指针是使用 “*int”而不是 “&int”初始化的?

c - 尽管使用指向导航的指针,但数组的地址已更改

c - RTEMS 如何获得 DMA 可访问内存