小编Pro*_*ear的帖子

处理器如何读取内存?

我正在尝试重新实现 malloc 并且我需要了解对齐的目的。据我了解,如果内存对齐,代码将执行得更快,因为处理器不必采取额外的步骤来恢复被切割的内存位。我想我明白 64 位处理器读取 64 位 x 64 位内存。现在,让我们假设我有一个按顺序排列的结构(没有填充):一个字符、一个短字符、一个字符和一个整数。为什么短路会错位?我们拥有区块中的所有数据!为什么它必须在一个 2 的倍数的地址上。对于整数和其他类型,同样的问题?

我还有第二个问题:使用我之前提到的结构,处理器如何知道当它读取它的 64 位时前 8 位对应于一个字符,然后接下来的 16 位对应于一个短等等......?

c cpu cpu-architecture memory-alignment low-level

2
推荐指数
1
解决办法
743
查看次数

通过malloc和free进行内存管理

我目前正在学习如何通过 malloc 和 free 管理内存,我不明白为什么当我想要 malloc 1 个字节时,malloc 会为该块分配 32 个字节?对我来说,它应该为元数据分配 16 个字节(前一个块和下一个块的大小),为数据分配 1 个字节......

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

/**                                                                                            
 * pmem - print mem                                                                            
 * @p: memory address to start printing from                                                   
 * @bytes: number of bytes to print                                                            
 *                                                                                             
 * Return: nothing                                                                             
 */
void pmem(void *p, unsigned int bytes)
{
    unsigned char *ptr;
    unsigned int i;

    ptr = (unsigned char *)p;
    for (i = 0; i < bytes; i++)
    {
        if (i != 0)
        {
            printf(" …
Run Code Online (Sandbox Code Playgroud)

c unix memory

1
推荐指数
1
解决办法
113
查看次数

标签 统计

c ×2

cpu ×1

cpu-architecture ×1

low-level ×1

memory ×1

memory-alignment ×1

unix ×1