[理工] 计组

楼主: mistel (Mistel)   2019-11-23 00:43:37
1.https://i.imgur.com/k06GdaF.jpg
https://i.imgur.com/fDPn0Or.jpg
请问一下memory配置的问题,感觉有一些应该很基础的东西自己还是不是很懂,
我没有误解题意的话,这边是在说Code B用到的资料在抓取进cache会花比较久的原因
老师给的理由是code B的data是在heap,而heap在memory中是四散放置的(?!
所以存取时间较久
想请问两个问题,
(1).heap里面除了pointer以外还会放什么呢?如果我今天“struct node”生了一个节点出
来,那这一个node他是存在哪里?
(2).为什么heap是碎裂的呢?我以为他会直接放在memory中的同一页?
2.https://i.imgur.com/L9wcuOh.jpg
请问这题的a选项为什么是对的?觉得他语意是指可以消除分支指令后面加载的那个指令产
生的stall
作者: mathtsai (mathtsai)   2019-11-23 00:48:00
我比较好奇为什么code A的for循环长那么怪
作者: mi981027 (呱呱竹)   2019-11-23 01:00:00
这跟spatial locality有关 因为array是连续配置的空间跑for循环时一定会一次多抓一点附近的东西到cache access就不需要每次都到memory里面抓heap里面不是存pointer,应该这样讲:每次生一个struct node,在c会使用malloc来配置一块位于heap的内存空间给指标而每次配都不一定是连续的位置,在traverse时都要到memory抓 就慢一点
作者: b10007034 (Warren)   2019-11-23 01:11:00
Loop unrolling 复制n个loop body但没有重复n个beq/bnq 所以可以消除n-1个beq/bbq*beq/bnq 可恶,打错字有点饿..
作者: mathtsai (mathtsai)   2019-11-23 02:23:00
其实我的意思是 A code for里面那圈真的会动吗...
作者: aggress5566 (哩贺)   2019-11-23 03:12:00
很明显就是typo 不影响作答 都快要考试了应该是先把mi大提到的先搞清楚吧
作者: b10007034 (Warren)   2019-11-23 11:04:00
n次就是你说的两次、四次总共省下的次数还要乘上x/n,x代表for循环次数
作者: ekids1234 (∵:☆星痕╭☆)   2019-11-23 11:43:00
node 本身的位址应该是在 stack
作者: plsmaop (plsmaop)   2019-11-23 11:46:00
https://i.imgur.com/uNAlieM.jpg其实 c 本身的型态只有内存位置,跟内存里面的值,但我们会用各种各样的型态来表示这段内存该怎么解释他的意思,除了去了解 memory layout 之外,还可以用 memcpy, 指标运算等等作实验看看 c 怎么如何直接操作内存但操作内存毕竟会根据机器不同而有不同的结果,最好在常见的 64 位元linux distribution(Centos, Debian )上做还要在 x86 的机器上
楼主: mistel (Mistel)   2019-11-23 12:48:00
感谢各位大大,因为c算是自学所以有很多遗漏的东西,搞懂了不少观念
作者: mi981027 (呱呱竹)   2019-11-23 12:48:00
没错 像p大说的 如果单问node *n2这个指标在哪他本身是在stack的,是他指向的位置才会在heap里

Links booklink

Contact Us: admin [ a t ] ucptt.com