我想知道链接列表与C中的连续数组相比有什么优缺点.因此,我读了一篇关于链表的维基百科文章. https://en.wikipedia.org/wiki/Linked_list#Disadvantages
根据这篇文章,缺点如下:
- 由于指针使用的存储空间,它们使用的内存多于数组.
- 必须从头开始按顺序读取链接列表中的节点,因为链接列表本质上是顺序访问.
在反向遍历方面,链表中出现了困难.例如,单个链表很难向后导航,而双链表更容易阅读,内存浪费在分配上.
节点存储不明确,大大增加了访问列表中各个元素所需的时间,尤其是CPU缓存.
我理解前3分,但我最后一点很难:
节点存储不明确,大大增加了访问列表中各个元素所需的时间,尤其是CPU缓存.
关于CPU Cache的文章没有提到任何关于非连续内存阵列的内容.据我所知,CPU缓存仅缓存经常使用的地址,总共10 ^ -6缓存未命中.
因此,我不明白为什么CPU缓存在非连续内存阵列方面的效率会降低.
为了有一个独立的二进制目的,我想在RAM中挂载一个有效负载,用int声明它的内容int
int *payloadptr = malloc(10*sizeof(int));
payloadptr[0] = 0x11223344;
payloadptr[1] = 0x55667788;
Run Code Online (Sandbox Code Playgroud)
这个数据设置器脚本是自动生成的,我选择用int做int,以便在我的.c文件中占用比char更少的空间但是当我转储内存时我可以看到字节是完全混合的但事实并非如此用char by char方法有什么可能导致这个?