gpt4 book ai didi

c - 如何使用 posix_memalign 在 c 中初始化结构

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:48 25 4
gpt4 key购买 nike

如果我传递了一个内存位置,我正在尝试弄清楚如何初始化一个结构,下面的情况是我正在尝试做的,但它抛出缩短为相关代码的“无效初始化程序”

#ifndef PAGE_ALLOC_H
#define PAGE_ALLOC_H


typedef struct listNode
{
struct listNode *prev;
struct listNode *next; // prev/next element in linked list
char * address;
} listNode;
#endif

_____________________________________________

#include "page_alloc.h"
#include <stdlib.h>
#include <stdio.h>

int main (int argc, char ** args)
{
void * memptr;
int test = posix_memalign(&memptr, 2, 128); // test is > 1, values such as 16 and 22 is this ok? It does seem to return a valid memory address though, but can't test until struct lets me initialize to it...

listNode testNode = memptr; // this throws improper initialization flag, but how else do I do tell //the struct where the eligible memory is?? Isn't that what malloc does? Return a point to acquired //memory

// Now this is what I imagine doing after telling testNode where its allocated memory

testNode ->prev = somePreviousNode; // etc.

}

我显然做错了什么,但是什么?如果这是一个愚蠢的问题,我很抱歉,但我找不到 posix_memalign 的任何示例,也找不到使用指向已分配内存的指针正确初始化结构的解释。我需要动态添加节点,因为这是一个指向内存位置的双向链表(用于跟踪“页面”)

感谢任何见解!!!

最佳答案

testNode 是该结构的一个对象,您正在为其分配一个指针 (memptr):

listNode testNode = memptr; 

而是创建一个指向 listnode 的指针并将分配的内存分配给它:

listNode *testNode = memptr; 

注意:alignment参数的值要满足两个条件:

  1. 应该是 sizeof(void*) 的倍数
  2. 应该是 2 的幂。

例如,
如果在您的机器上,sizeof(void*) = 4,则可接受的值为 4,8,16...
如果在您的机器上,sizeof(void*) = 8,则可接受的值为 8,16,32..

关于c - 如何使用 posix_memalign 在 c 中初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22470916/

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