gpt4 book ai didi

c - C 程序中的 sbrk 函数和指针

转载 作者:行者123 更新时间:2023-11-30 19:42:37 26 4
gpt4 key购买 nike

代码:

typedef long Align;
union header {
struct {
union header *ptr;
unsigned size;
} s;
Align x;
};

typedef union header Header;

................
................
................

static Header *morecore(unsigned nu)
{
char *cp, *sbrk(int);
Header *up;
if (nu < NALLOC)
nu = NALLOC;
cp = sbrk(nu * sizeof(Header));
if (cp == (char *) -1)
return NULL;
up = (Header *) cp;
up->s.size = nu;
free((void *)(up+1));
return freep;
}

疑问:

考虑 morecore 函数正在从其他函数调用,并从 argument(nu) 接收 4 作为 int。我有疑问 以下陈述。

cp = sbrk(nu * sizeof(Header));
if (cp == (char *) -1)
return NULL;
up = (Header *) cp;
up->s.size = nu;

up 只是一个指向 Header 的指针。但是,它仍然没有指向任何 Header 变量。 sbrk 分配请求的内存并 返回当前程序中断并存储在 cp 中。然后将cp中存储的地址进行强制转换并分配给up。现在,up 包含 sbrk 作为指向 Header 变量的指针返回的地址。然后出现以下语句,

up->s.size = nu;

up 仅包含 sbrk 返回的地址。那么上面的语句是如何将nu存储在size变量中的呢?

最佳答案

// sbrk allocate "nu * sizeof(Header)" bytes at the address returned in cp.
cp = sbrk(nu * sizeof(Header));
// if cp is set to error return value (void *)-1 then cp is an invalid address.
if (cp == (char *) -1)
return NULL;
// up is a pointer and its value is set to the new address (cp).
up = (Header *) cp;
// up is set to the new data allocated by sbrk in the memory. "->" will resolve the address in "up" and store the data.
up->s.size = nu;

关于c - C 程序中的 sbrk 函数和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31308342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com