作者mistel (Mistel)
看板Grad-ProbAsk
标题[理工] 计组
时间Sat Nov 23 00:43:37 2019
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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.140.48.114 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Grad-ProbAsk/M.1574441019.A.AC7.html
1F:→ mathtsai: 我比较好奇为什麽code A的for回圈长那麽怪 11/23 00:48
2F:推 mi981027: 这跟spatial locality有关 因为array是连续配置的空间11/23 01:00
3F:→ mi981027: 跑for回圈时一定会一次多抓一点附近的东西到cache acce11/23 01:00
4F:→ mi981027: ss就不需要每次都到memory里面抓11/23 01:00
5F:→ mi981027: heap里面不是存pointer,应该这样讲: 11/23 01:00
6F:→ mi981027: 每次生一个struct node,在c会使用malloc来配置一块位11/23 01:00
7F:→ mi981027: 於heap的记忆体空间给指标11/23 01:00
8F:→ mi981027: 而每次配都不一定是连续的位置,在traverse时都要到11/23 01:00
9F:→ mi981027: memory抓 就慢一点11/23 01:00
每次配置节点可能会是不连续的记忆体位置这边我搞懂了,
另外跟mi大确认一下,
假设我做了
node a1;
node *a2;
那a1,a2都是存到heap上吗?
刚刚爬了一些范例,说struct内的变数是在heap没错,但没有说明
node a1;
这个变数a1会放在哪... 跪求解惑
10F:推 b10007034: Loop unrolling 复制n个loop body但没有重复n个11/23 01:11
11F:→ b10007034: beq/bnq 所以可以消除n-1个beq/bbq11/23 01:11
XD
问一下这边是把loop全部展开的情况才是这样吗?
因为有些习题只展开两次,四次等等
12F:→ b10007034: *beq/bnq 可恶,打错字有点饿..11/23 01:12
13F:→ mathtsai: 其实我的意思是 A code for里面那圈真的会动吗...11/23 02:23
14F:嘘 aggress5566: 很明显就是typo 不影响作答 都快要考试了应该是先11/23 03:12
15F:→ aggress5566: 把mi大提到的先搞清楚吧11/23 03:12
息怒,我猜mathtsai大不是以考生身份逛这个版的,之前也有问题被他解决,不要吵架><
※ 编辑: mistel (223.140.48.114 台湾), 11/23/2019 08:07:18
※ 编辑: mistel (223.140.48.114 台湾), 11/23/2019 08:22:27
※ 编辑: mistel (223.140.48.114 台湾), 11/23/2019 08:58:37
16F:推 b10007034: n次就是你说的两次、四次 11/23 11:04
17F:→ b10007034: 总共省下的次数还要乘上x/n,x代表for回圈次数 11/23 11:06
18F:推 ekids1234: node 本身的位址应该是在 stack 11/23 11:43
20F:推 plsmaop: 其实 c 本身的型态只有记忆体位置,跟记忆体里面的值, 11/23 11:52
21F:→ plsmaop: 但我们会用各种各样的型态来表示这段记忆体该怎麽解释他 11/23 11:52
22F:→ plsmaop: 的意思,除了去了解 memory layout 之外,还可以用 memcp 11/23 11:52
23F:→ plsmaop: y, 指标运算等等作实验看看 c 怎麽如何直接操作记忆体 11/23 11:52
24F:推 plsmaop: 但操作记忆体毕竟会根据机器不同而有不同的结果,最好在 11/23 11:54
25F:→ plsmaop: 常见的 64 位元linux distribution(Centos, Debian )上 11/23 11:54
26F:→ plsmaop: 做 11/23 11:54
27F:推 plsmaop: 还要在 x86 的机器上 11/23 11:55
28F:→ mistel: 感谢各位大大,因为c算是自学所以有很多遗漏的东西,搞懂 11/23 12:48
29F:→ mistel: 了不少观念 11/23 12:48
30F:推 mi981027: 没错 像p大说的 如果单问node *n2这个指标在哪 11/23 12:48
31F:→ mi981027: 他本身是在stack的,是他指向的位置才会在heap里 11/23 12:48