æ ¹æ®åŒ…括Wikipedia在内的多个æ¥æºï¼Œå®žçŽ°äºŒå‰æ ‘的两ç§æœ€å¸¸ç”¨çš„方法是:
第二个在内å˜ä½¿ç”¨å’Œå¼•ç”¨ä½ç½®æ–¹é¢æ˜Žæ˜¾ä¼˜è¶Šã€‚但是,如果您希望å…è®¸æ ‘ä¸çš„æ’å…¥å’Œåˆ é™¤ï¼Œå¯èƒ½ä¼šä½¿æ ‘ä¸å¹³è¡¡ï¼Œåˆ™ä¼šå¯¼è‡´é—®é¢˜ã€‚è¿™æ˜¯å› ä¸ºæ¤è®¾è®¡çš„内å˜ä½¿ç”¨é‡æ˜¯æ ‘深度的指数函数。
å‡è®¾æ‚¨è¦æ”¯æŒæ¤ç±»æ’å…¥å’Œåˆ é™¤ã€‚å¦‚ä½•å®žçŽ°æ ‘ï¼Œä»¥ä¾¿æ ‘é历å¯ä»¥å……分利用CPU缓å˜ã€‚
我æ£åœ¨è€ƒè™‘ä¸ºèŠ‚ç‚¹åˆ›å»ºä¸€ä¸ªå¯¹è±¡æ± å¹¶å°†å®ƒä»¬åˆ†é…到一个数组ä¸ã€‚è¿™æ ·èŠ‚ç‚¹å°†é 近在一起 - >å› æ¤ï¼Œè‰¯å¥½çš„å‚考地点。
但是,如果节点的大å°ä¸Žç¼“å˜è¡Œçš„大å°ç›¸åŒï¼Œè¿™æ˜¯å¦æœ‰æ„义?
如果您的L1行大å°ä¸º64å—节,并且您访问std::vector<std::uint8_t>(64)
的第一个æˆå‘˜ï¼Œåˆ™å¯èƒ½åœ¨L1缓å˜ä¸æ‹¥æœ‰è¯¥å‘é‡çš„全部内容。这æ„味ç€æ‚¨å¯ä»¥éžå¸¸å¿«é€Ÿåœ°è®¿é—®ä»»ä½•å…ƒç´ ã€‚ä½†æ˜¯å¦‚æžœå…ƒç´ çš„å¤§å°ä¸Žç¼“å˜è¡Œå¤§å°ç›¸åŒæ€Žä¹ˆåŠžï¼Ÿç”±äºŽL1,L2å’ŒL3缓å˜çš„缓å˜è¡Œä¸ºlikely not to be very differentï¼Œå› æ¤ä¼¼ä¹Žæ²¡æœ‰åŠžæ³•åœ¨å“ªä¸ªä½ç½®å¼•ç”¨å¯ä»¥æ供帮助。我错了å—?还有什么å¯ä»¥åšçš„?
ç”案 0 :(得分:4)
除éžæ‚¨æ£åœ¨ç ”究如何改进缓å˜è®¿é—®æ¨¡å¼çš„二å‰æ ‘,å¦åˆ™æˆ‘觉得这是XY problem - 您è¦è§£å†³çš„问题是什么?为什么您认为二å‰æ ‘是解决问题的最佳算法?什么是预期的工作集大å°ï¼Ÿ
如果您æ£åœ¨å¯»æ‰¾ä¸€ä¸ªé€šç”¨çš„å…³è”å˜å‚¨ï¼Œé‚£ä¹ˆæœ‰å¤šä¸ªç¼“å˜å‹å¥½ï¼ˆå…¶ä»–关键å—:“缓å˜é«˜æ•ˆâ€ï¼Œâ€œç¼“å˜æ— å…³â€ï¼‰ç®—法,例如Judy arrays,其ä¸æœ‰ä¸€ä¸ªextensive explanation PDF
如果您的工作集大å°è¶³å¤Ÿå°ï¼Œå¹¶ä¸”您åªéœ€è¦æœ‰åºçš„一组项目,那么一个简å•çš„有åºæ•°ç»„就足够了,这å¯èƒ½ä¼šå¸¦æ¥å¦ä¸€ä¸ªæ€§èƒ½ä¼˜åŠ¿ - branch prediction。
最åŽï¼Œæ‰¾å‡ºæœ€é€‚åˆæ‚¨ç”¨ä¾‹çš„方法是å°è¯•è¡¡é‡ä¸åŒçš„方法。
ç”案 1 :(得分:1)
使用å—分é…器。
æ‚¨æœ‰ä¸€ä¸ªæˆ–å‡ ä¸ªè¿žç»çš„内å˜â€œæ± â€ï¼Œæ‚¨å¯ä»¥ä»Žä¸é‡Šæ”¾å›ºå®šå¤§å°çš„å—。它是作为链表实现的。所以分é…就是
answer = head,
head = head->next,
return answer;
å…è´¹åªæ˜¯
tofree->next = head;
head = tofree;
如果您å…è®¸å¤šä¸ªæ± å½“ç„¶éœ€è¦ç¼–写代ç æ¥ç¡®å®šæ± ï¼Œè¿™ä¼šå¢žåŠ ä¸€äº›å¤æ‚性,但ä¸ä¼šå¤ªå¤šã€‚它本质上是一个简å•çš„内å˜åˆ†é…系统。 ç”±äºŽæ‰€æœ‰æ± æˆå‘˜åœ¨å†…å˜ä¸éƒ½å¾ˆé è¿‘ï¼Œå› æ¤æ‚¨å¯ä»¥åœ¨å°æ ‘上获得良好的缓å˜ä¸€è‡´æ€§ã€‚å¯¹äºŽå¤§æ ‘ï¼Œä½ å¿…é¡»è¦æœ‰ç‚¹èªæ˜Žã€‚