1740:
1730:
1720:
1710:
1700:
244:
are special heap allocators that allocate objects in their own random virtual memory page, allowing invalid reads and writes to be stopped and debugged at the exact instruction that causes them. Protection relies upon hardware memory protection and thus overhead is typically not substantial, although
268:
and the insertion of runtime checks on every memory access; this approach has overhead, but less than that of
Valgrind. All garbage-collected languages take this approach. For C and C++, many tools exist that perform a compile-time transformation of the code to do memory safety checks at runtime,
256:
and runs the compiled program in a memory-checking virtual machine, providing guaranteed detection of a subset of runtime memory errors. However, it typically slows the program down by a factor of 40, and furthermore must be explicitly informed of custom memory allocators.
469:(concurrent reads/writes to shared memory) as being part of memory safety (e.g., for access control). The Rust programming language prevents many kinds of memory-based race conditions by default, because it ensures there is at most one writer
245:
it can grow significantly if the program makes heavy use of allocation. Randomization provides only probabilistic protection against memory errors, but can often be easily implemented in existing software by relinking the binary.
193:
is the most common technique for preventing some of the memory safety problems, since it prevents common memory safety errors like use-after-free for all data allocated within the language runtime. When combined with automatic
144:
or other application-dependent methods to obtain addresses, although its adoption has been slow. However, deployments of the technology are typically limited to randomizing libraries and the location of the stack.
327:– accessing a pointer outside the virtual memory space. A null pointer dereference will often cause an exception or program termination in most environments, but can cause corruption in operating system
901:
Bessey, Al; Engler, Dawson; Block, Ken; Chelf, Ben; Chou, Andy; Fulton, Bryan; Hallem, Seth; Henri-Gros, Charles; Kamsky, Asya; McPeak, Scott (1 February 2010). "A few billion lines of code later".
260:
With access to the source code, libraries exist that collect and track legitimate values for pointers ("metadata") and check each pointer access against the metadata for validity, such as the
202:
arithmetic, garbage collected languages provide strong memory safety guarantees (though the guarantees may be weaker for low-level operations explicitly marked unsafe, such as use of a
173:. The pervasiveness and severity of vulnerabilities and exploits arising from memory safety issues have led several security researchers to describe identifying memory safety issues as
185:
Most modern high-level programming languages are memory-safe by default, though not completely since they only check their own code and not the system they interact with. Automatic
372:
arise when a pointer is used prior to initialization to some known state. They show the same erratic behaviour as dangling pointers, though they are less likely to stay undetected.
165:
were caused by memory safety problems. Many other high-profile vulnerabilities and exploits in critical software have ultimately stemmed from a lack of memory safety, including
477:
automatically prevent memory-based race conditions, yet are still generally considered "memory safe" languages. Therefore, countering race conditions is generally
276:
BoundWarden is a new spatial memory enforcement approach that utilizes a combination of compile-time transformation and runtime concurrent monitoring techniques.
233:
provide no memory safety guarantees. The substantial amount of software written in C and C++ has motivated the development of external static analysis tools like
424:
may prematurely free a new object at the same address. If the exact address has not been reused, other corruption may occur, especially in allocators that use
1774:
1680:
803:
1341:
1389:
1733:
1537:
1361:
698:
265:
190:
1723:
206:). However, the performance overhead of garbage collection makes these languages unsuitable for certain performance-critical applications.
780:
213:, memory safety is not usually guaranteed by the runtime. Instead, memory safety properties must either be guaranteed by the compiler via
1769:
1743:
1046:
316:
241:
133:
1015:
747:
1560:
1334:
97:
174:
1685:
960:
529:
355:– a variable that has not been assigned a value is used. It may contain an undesired or, in some languages, a corrupt value.
414:
more memory than the amount available. In some languages, this condition must be checked for manually after each allocation.
157:
security engineer reported that 70% of all security vulnerabilities were caused by memory safety issues. In 2020, a team at
299:– out-of-bound writes can corrupt the content of adjacent objects, or internal data (like bookkeeping information for the
1545:
1383:
391:
1210:
Dhumbumroong, Smith (2020). "BoundWarden: Thread-enforced spatial memory safety through compile-time transformations".
1065:
1522:
448:– when multiple allocators are in use, attempting to free memory with a deallocation function of a different allocator
222:
129:
61:
1580:
1703:
1590:
1570:
1423:
1327:
1172:
203:
199:
1649:
636:
328:
253:
218:
45:
1246:
561:
1509:
226:
210:
69:
1713:
1575:
1550:
1456:
261:
214:
65:
1527:
675:
30:
This article is about protection of memory in software development. For hardware protection of memory, see
1764:
1479:
1377:
1190:
351:
162:
850:
644:
125:
1555:
453:
49:
1095:
1433:
514:
Proceedings of the 2003 ACM SIGPLAN conference on
Language, compiler, and tool for embedded systems
1122:
625:
1675:
1659:
1585:
1227:
1021:
966:
918:
722:
535:
121:
77:
945:
Proceedings of the 27th ACM SIGPLAN Conference on
Programming Language Design and Implementation
772:
1451:
1350:
1011:
956:
694:
598:
525:
411:
395:
332:
186:
117:
31:
1050:
1628:
1623:
1466:
1219:
1003:
948:
910:
686:
517:
342:
311:
304:
270:
57:
992:
1618:
1517:
657:
587:
295:
195:
137:
81:
53:
875:
506:
1633:
1600:
1595:
1441:
1400:
937:
465:
457:– when the same memory location is allocated and modified twice for unrelated purposes.
386:
1758:
1413:
1408:
1231:
406:
364:– dereferencing an invalid pointer or a pointer to memory that has not been allocated
141:
41:
674:
van der Veen, Victor; dutt-Sharma, Nitish; Cavallaro, Lorenzo; Bos, Herbert (2012).
398:
typically halts the program, preventing memory corruption, but functions with large
1025:
970:
922:
539:
505:
Dhurjati, Dinakar; Kowshik, Sumant; Adve, Vikram; Lattner, Chris (1 January 2003).
368:
359:
101:
1297:
1271:
1654:
1223:
690:
439:
399:
378:
300:
109:
390:– occurs when a program runs out of stack space, typically because of too deep
1418:
1000:
Proceedings of the 17th ACM conference on
Computer and communications security
323:
166:
602:
1565:
1446:
1073:
1007:
952:
914:
425:
154:
105:
80:
with pointers implemented as direct memory addresses with no provision for
17:
521:
1499:
1494:
1484:
1474:
804:"Serious flaw that lurked in sudo for 9 years hands over root privileges"
249:
234:
1173:"Semantic Designs: CheckPointer compared to other safety checking tools"
473:
one or more readers. Many other programming languages, such as Java, do
315:– out-of-bound reads can reveal sensitive data or help attackers bypass
1489:
113:
1147:
685:. Lecture Notes in Computer Science. Vol. 7462. pp. 86–106.
335:, or when use of the null pointer involves a large or negative offset.
1195:
748:"Microsoft: 70 percent of all security bugs are memory safety issues"
435:
421:
158:
1319:
221:
or carefully managed by the programmer at runtime. For example, the
821:
230:
73:
481:
considered necessary for a language to be considered memory safe.
1066:"Using Valgrind's Memcheck Tool to Find Memory Errors and Leaks"
170:
120:
developed quickly thereafter, escalating with multitudes of new
1323:
1247:"How to Avoid, Find (and Fix) Memory Errors in your C/C++ Code"
595:
Technical Report - University of
Cambridge. Computer Laboratory
382:– when memory usage is not tracked or is tracked incorrectly
161:
similarly reported that 70% of all "severe security bugs" in
507:"Memory safety without runtime checks or garbage collection"
938:"DieHard: Probabilistic memory safety for unsafe languages"
225:
implements a borrow checker to ensure memory safety, while
68:
checks array bounds and pointer dereferences. In contrast,
264:. In general, memory safety can be safely assured using
723:"Defeating Solar Designer's Non-executable Stack Patch"
345:
storing the address of an object that has been deleted.
1362:
Memory management as a function of an operating system
936:
Berger, Emery D.; Zorn, Benjamin G. (1 January 2006).
676:"Memory Errors: The Past, the Present, and the Future"
96:
Memory errors were first considered in the context of
1668:
1642:
1609:
1536:
1508:
1465:
1432:
1399:
1370:
991:Novark, Gene; Berger, Emery D. (1 January 2010).
844:
842:
284:Many different types of memory errors can occur:
108:. Developments were mostly theoretical until the
1298:"CWE-762: Mismatched Memory Management Routines"
597:. University of Cambridge, Computer Laboratory.
169:and a long-standing privilege escalation bug in
104:systems, in an effort to avoid problems such as
27:State of being protected from memory access bugs
273:which imposes an average slowdown factor of 2.
1148:"Using the Garbage Collector as Leak Detector"
1335:
683:Research in Attacks, Intrusions, and Defenses
237:, which offers static memory analysis for C.
198:on all array accesses and no support for raw
40:is the state of being protected from various
8:
1681:International Symposium on Memory Management
562:"How C Makes It Hard To Check Array Bounds"
1342:
1328:
1320:
240:DieHard, its redesign DieHarder, and the
140:attacks and requires the attacker to use
1272:"CWE-633: Weaknesses that Affect Memory"
490:
112:, which exploited a buffer overflow in
1123:"Why custom allocators/pools are hard"
669:
667:
653:
642:
500:
498:
496:
494:
64:is said to be memory-safe because its
7:
1191:"AddressSanitizerPerformanceNumbers"
783:from the original on 24 January 2018
777:Common Vulnerabilities and Exposures
1775:Programming language implementation
1390:Input–output memory management unit
1096:"Memcheck: a memory error detector"
128:and defense techniques such as the
626:"Computer Security Planning Study"
317:address space layout randomization
291:: invalid read/write of a pointer
242:Allinea Distributed Debugging Tool
134:address space layout randomization
25:
1047:"Memory Debugging in Allinea DDT"
586:Akritidis, Periklis (June 2011).
1739:
1738:
1729:
1728:
1719:
1718:
1709:
1708:
1699:
1698:
434:– passing an invalid address to
1561:Concurrent mark sweep collector
1212:Science of Computer Programming
802:Goodin, Dan (4 February 2020).
588:"Practical memory safety for C"
98:resource management (computing)
1686:Region-based memory management
1302:Community Weakness Enumeration
1276:Community Weakness Enumeration
993:"DieHarder: Securing the heap"
136:. Randomization prevents most
1:
1734:Memory management algorithms
1546:Automatic Reference Counting
1384:Translation lookaside buffer
463:Some lists may also include
1724:Automatic memory management
1523:C dynamic memory allocation
1224:10.1016/j.scico.2020.102519
691:10.1007/978-3-642-33338-5_5
175:"shooting fish in a barrel"
84:, and thus are potentially
1791:
1770:Computer security exploits
1744:Memory management software
1591:Tracing garbage collection
1424:Virtual memory compression
266:tracing garbage collection
204:foreign function interface
29:
1694:
1357:
1002:. ACM. pp. 573–584.
947:. ACM. pp. 158–168.
903:Communications of the ACM
637:Electronic Systems Center
269:such as CheckPointer and
254:instruction set simulator
223:Rust programming language
219:automated theorem proving
1518:Static memory allocation
1510:Manual memory management
1179:. Semantic Designs, Inc.
855:stanford-cs242.github.io
211:manual memory management
46:security vulnerabilities
1576:Garbage-first collector
1551:Boehm garbage collector
1457:x86 memory segmentation
1177:www.semanticdesigns.com
1008:10.1145/1866307.1866371
953:10.1145/1133981.1134000
915:10.1145/1646353.1646374
851:"CS 242: Memory safety"
826:fishinabarrel.github.io
516:. ACM. pp. 69–80.
410:– the program tries to
352:Uninitialized variables
262:Boehm garbage collector
215:static program analysis
209:For languages that use
66:runtime error detection
1581:Mark–compact algorithm
1378:Memory management unit
652:Cite journal requires
280:Types of memory errors
522:10.1145/780732.780743
248:The memcheck tool of
126:return-to-libc attack
1528:new and delete (C++)
1100:Valgrind User Manual
420:– repeated calls to
402:may bypass the page.
130:non-executable stack
1434:Memory segmentation
624:Anderson, James P.
331:or systems without
1676:Automatic variable
1660:Unreachable memory
1586:Reference counting
1556:Cheney's algorithm
1538:Garbage collection
1076:on 7 November 2018
1070:computing.llnl.gov
1064:Gyllenhaal, John.
822:"Fish in a Barrel"
341:– dereferencing a
324:Invalid page fault
191:garbage collection
78:pointer arithmetic
48:when dealing with
1752:
1751:
1704:Memory management
1452:Virtual 8086 mode
1351:Memory management
721:Wojtczuk, Rafal.
700:978-3-642-33337-8
333:memory protection
187:memory management
118:computer security
58:dangling pointers
32:Memory protection
16:(Redirected from
1782:
1742:
1741:
1732:
1731:
1722:
1721:
1712:
1711:
1702:
1701:
1629:Dangling pointer
1624:Buffer over-read
1596:Strong reference
1467:Memory allocator
1344:
1337:
1330:
1321:
1314:
1313:
1311:
1309:
1294:
1288:
1287:
1285:
1283:
1268:
1262:
1261:
1259:
1257:
1251:Cprogramming.com
1242:
1236:
1235:
1207:
1201:
1200:
1187:
1181:
1180:
1169:
1163:
1162:
1160:
1158:
1144:
1138:
1137:
1135:
1133:
1121:Kreinin, Yossi.
1118:
1112:
1111:
1109:
1107:
1092:
1086:
1085:
1083:
1081:
1072:. Archived from
1061:
1055:
1054:
1049:. Archived from
1043:
1037:
1036:
1034:
1032:
997:
988:
982:
981:
979:
977:
942:
933:
927:
926:
898:
892:
891:
889:
887:
880:The Rustonomicon
872:
866:
865:
863:
861:
849:Crichton, Will.
846:
837:
836:
834:
832:
818:
812:
811:
799:
793:
792:
790:
788:
769:
763:
762:
760:
758:
744:
738:
737:
735:
733:
718:
712:
711:
709:
707:
680:
671:
662:
661:
655:
650:
648:
640:
630:
621:
615:
614:
612:
610:
605:. UCAM-CL-TR-798
592:
583:
577:
576:
574:
572:
560:Koenig, Andrew.
557:
551:
550:
548:
546:
511:
502:
438:can corrupt the
387:Stack exhaustion
343:dangling pointer
312:Buffer over-read
271:AddressSanitizer
76:allow arbitrary
54:buffer overflows
52:access, such as
21:
1790:
1789:
1785:
1784:
1783:
1781:
1780:
1779:
1755:
1754:
1753:
1748:
1690:
1664:
1638:
1619:Buffer overflow
1605:
1532:
1504:
1461:
1428:
1395:
1366:
1353:
1348:
1318:
1317:
1307:
1305:
1296:
1295:
1291:
1281:
1279:
1270:
1269:
1265:
1255:
1253:
1244:
1243:
1239:
1209:
1208:
1204:
1189:
1188:
1184:
1171:
1170:
1166:
1156:
1154:
1152:www.hboehm.info
1146:
1145:
1141:
1131:
1129:
1127:Proper Fixation
1120:
1119:
1115:
1105:
1103:
1094:
1093:
1089:
1079:
1077:
1063:
1062:
1058:
1045:
1044:
1040:
1030:
1028:
1018:
995:
990:
989:
985:
975:
973:
963:
940:
935:
934:
930:
900:
899:
895:
885:
883:
874:
873:
869:
859:
857:
848:
847:
840:
830:
828:
820:
819:
815:
801:
800:
796:
786:
784:
773:"CVE-2014-0160"
771:
770:
766:
756:
754:
746:
745:
741:
731:
729:
720:
719:
715:
705:
703:
701:
678:
673:
672:
665:
651:
641:
639:. ESD-TR-73-51.
628:
623:
622:
618:
608:
606:
590:
585:
584:
580:
570:
568:
559:
558:
554:
544:
542:
532:
509:
504:
503:
492:
487:
466:race conditions
446:Mismatched free
407:Heap exhaustion
296:Buffer overflow
282:
196:bounds checking
189:in the form of
183:
151:
138:buffer overflow
116:. The field of
94:
82:bounds checking
60:. For example,
35:
28:
23:
22:
15:
12:
11:
5:
1788:
1786:
1778:
1777:
1772:
1767:
1757:
1756:
1750:
1749:
1747:
1746:
1736:
1726:
1716:
1714:Virtual memory
1706:
1695:
1692:
1691:
1689:
1688:
1683:
1678:
1672:
1670:
1666:
1665:
1663:
1662:
1657:
1652:
1646:
1644:
1640:
1639:
1637:
1636:
1634:Stack overflow
1631:
1626:
1621:
1615:
1613:
1607:
1606:
1604:
1603:
1601:Weak reference
1598:
1593:
1588:
1583:
1578:
1573:
1568:
1563:
1558:
1553:
1548:
1542:
1540:
1534:
1533:
1531:
1530:
1525:
1520:
1514:
1512:
1506:
1505:
1503:
1502:
1497:
1492:
1487:
1482:
1477:
1471:
1469:
1463:
1462:
1460:
1459:
1454:
1449:
1444:
1442:Protected mode
1438:
1436:
1430:
1429:
1427:
1426:
1421:
1416:
1411:
1405:
1403:
1401:Virtual memory
1397:
1396:
1394:
1393:
1387:
1381:
1374:
1372:
1368:
1367:
1365:
1364:
1358:
1355:
1354:
1349:
1347:
1346:
1339:
1332:
1324:
1316:
1315:
1289:
1263:
1237:
1202:
1182:
1164:
1139:
1113:
1102:. valgrind.org
1087:
1056:
1053:on 2015-02-03.
1038:
1016:
983:
961:
928:
893:
867:
838:
813:
794:
764:
739:
713:
699:
663:
654:|journal=
616:
578:
552:
530:
489:
488:
486:
483:
461:
460:
459:
458:
449:
443:
429:
415:
403:
375:
374:
373:
365:
348:
347:
346:
339:Use after free
336:
320:
308:
281:
278:
182:
179:
150:
147:
93:
90:
26:
24:
14:
13:
10:
9:
6:
4:
3:
2:
1787:
1776:
1773:
1771:
1768:
1766:
1765:Software bugs
1763:
1762:
1760:
1745:
1737:
1735:
1727:
1725:
1717:
1715:
1707:
1705:
1697:
1696:
1693:
1687:
1684:
1682:
1679:
1677:
1674:
1673:
1671:
1667:
1661:
1658:
1656:
1653:
1651:
1650:Fragmentation
1648:
1647:
1645:
1641:
1635:
1632:
1630:
1627:
1625:
1622:
1620:
1617:
1616:
1614:
1612:
1611:Memory safety
1608:
1602:
1599:
1597:
1594:
1592:
1589:
1587:
1584:
1582:
1579:
1577:
1574:
1572:
1569:
1567:
1564:
1562:
1559:
1557:
1554:
1552:
1549:
1547:
1544:
1543:
1541:
1539:
1535:
1529:
1526:
1524:
1521:
1519:
1516:
1515:
1513:
1511:
1507:
1501:
1498:
1496:
1493:
1491:
1488:
1486:
1483:
1481:
1478:
1476:
1473:
1472:
1470:
1468:
1464:
1458:
1455:
1453:
1450:
1448:
1445:
1443:
1440:
1439:
1437:
1435:
1431:
1425:
1422:
1420:
1417:
1415:
1414:Memory paging
1412:
1410:
1409:Demand paging
1407:
1406:
1404:
1402:
1398:
1391:
1388:
1385:
1382:
1379:
1376:
1375:
1373:
1369:
1363:
1360:
1359:
1356:
1352:
1345:
1340:
1338:
1333:
1331:
1326:
1325:
1322:
1303:
1299:
1293:
1290:
1277:
1273:
1267:
1264:
1252:
1248:
1241:
1238:
1233:
1229:
1225:
1221:
1217:
1213:
1206:
1203:
1198:
1197:
1192:
1186:
1183:
1178:
1174:
1168:
1165:
1153:
1149:
1143:
1140:
1128:
1124:
1117:
1114:
1101:
1097:
1091:
1088:
1075:
1071:
1067:
1060:
1057:
1052:
1048:
1042:
1039:
1027:
1023:
1019:
1017:9781450302456
1013:
1009:
1005:
1001:
994:
987:
984:
972:
968:
964:
958:
954:
950:
946:
939:
932:
929:
924:
920:
916:
912:
908:
904:
897:
894:
881:
877:
871:
868:
856:
852:
845:
843:
839:
827:
823:
817:
814:
809:
805:
798:
795:
782:
778:
774:
768:
765:
753:
749:
743:
740:
728:
724:
717:
714:
702:
696:
692:
688:
684:
677:
670:
668:
664:
659:
646:
638:
634:
627:
620:
617:
604:
600:
596:
589:
582:
579:
567:
563:
556:
553:
541:
537:
533:
527:
523:
519:
515:
508:
501:
499:
497:
495:
491:
484:
482:
480:
476:
472:
468:
467:
456:
455:
450:
447:
444:
441:
437:
433:
430:
427:
423:
419:
416:
413:
409:
408:
404:
401:
397:
393:
389:
388:
384:
383:
381:
380:
376:
371:
370:
369:Wild pointers
366:
363:
361:
357:
356:
354:
353:
349:
344:
340:
337:
334:
330:
326:
325:
321:
318:
314:
313:
309:
306:
302:
298:
297:
293:
292:
290:
289:Access errors
287:
286:
285:
279:
277:
274:
272:
267:
263:
258:
255:
251:
246:
243:
238:
236:
232:
228:
224:
220:
216:
212:
207:
205:
201:
197:
192:
188:
180:
178:
176:
172:
168:
164:
160:
156:
148:
146:
143:
142:heap spraying
139:
135:
131:
127:
123:
119:
115:
111:
107:
103:
99:
91:
89:
87:
86:memory-unsafe
83:
79:
75:
71:
67:
63:
59:
55:
51:
47:
43:
42:software bugs
39:
38:Memory safety
33:
19:
1610:
1306:. Retrieved
1301:
1292:
1280:. Retrieved
1275:
1266:
1254:. Retrieved
1250:
1245:Gv, Naveen.
1240:
1215:
1211:
1205:
1194:
1185:
1176:
1167:
1155:. Retrieved
1151:
1142:
1130:. Retrieved
1126:
1116:
1104:. Retrieved
1099:
1090:
1078:. Retrieved
1074:the original
1069:
1059:
1051:the original
1041:
1029:. Retrieved
999:
986:
974:. Retrieved
944:
931:
909:(2): 66–75.
906:
902:
896:
884:. Retrieved
879:
876:"References"
870:
860:22 September
858:. Retrieved
854:
831:21 September
829:. Retrieved
825:
816:
808:Ars Technica
807:
797:
785:. Retrieved
776:
767:
757:21 September
755:. Retrieved
751:
742:
730:. Retrieved
727:insecure.org
726:
716:
704:. Retrieved
682:
645:cite journal
632:
619:
607:. Retrieved
594:
581:
569:. Retrieved
565:
555:
543:. Retrieved
513:
478:
474:
470:
464:
462:
451:
445:
432:Invalid free
431:
417:
405:
400:stack frames
385:
377:
367:
360:Null pointer
358:
350:
338:
322:
310:
294:
288:
283:
275:
259:
247:
239:
208:
184:
152:
124:such as the
102:time-sharing
95:
85:
37:
36:
1655:Memory leak
418:Double free
379:Memory leak
362:dereference
153:In 2019, a
110:Morris worm
18:Memory safe
1759:Categories
1419:Page table
1218:: 102519.
962:1595933204
882:. Rust.org
787:8 February
566:Dr. Dobb's
531:1581136471
485:References
426:free lists
396:guard page
307:addresses.
181:Approaches
167:Heartbleed
106:fork bombs
1566:Finalizer
1447:Real mode
1232:224925197
779:. Mitre.
603:1476-2986
452:Unwanted
392:recursion
155:Microsoft
1500:ptmalloc
1495:mimalloc
1485:jemalloc
1475:dlmalloc
1371:Hardware
1308:13 March
1282:13 March
1256:13 March
1157:14 March
1132:13 March
1106:13 March
1080:13 March
1031:14 March
976:14 March
886:13 March
781:Archived
732:13 March
706:13 March
609:13 March
571:13 March
545:13 March
454:aliasing
412:allocate
252:uses an
250:Valgrind
235:Coverity
163:Chromium
1571:Garbage
1490:libumem
1392:(IOMMU)
1304:. MITRE
1278:. MITRE
1026:7880497
971:8984358
923:2611544
540:1459540
329:kernels
200:pointer
122:attacks
114:fingerd
92:History
1643:Issues
1230:
1196:GitHub
1024:
1014:
969:
959:
921:
697:
601:
538:
528:
305:return
159:Google
149:Impact
50:memory
1669:Other
1480:Hoard
1386:(TLB)
1380:(MMU)
1228:S2CID
1022:S2CID
996:(PDF)
967:S2CID
941:(PDF)
919:S2CID
752:ZDNET
679:(PDF)
629:(PDF)
591:(PDF)
536:S2CID
510:(PDF)
303:) or
1310:2017
1284:2017
1258:2017
1159:2017
1134:2017
1108:2017
1082:2017
1033:2017
1012:ISBN
978:2017
957:ISBN
888:2017
862:2022
833:2022
789:2018
759:2022
734:2017
708:2017
695:ISBN
658:help
611:2017
599:ISSN
573:2017
547:2017
526:ISBN
440:heap
436:free
422:free
394:. A
301:heap
229:and
217:and
171:sudo
132:and
100:and
72:and
62:Java
56:and
44:and
1220:doi
1216:198
1004:doi
949:doi
911:doi
687:doi
518:doi
479:not
475:not
231:C++
74:C++
1761::
1300:.
1274:.
1249:.
1226:.
1214:.
1193:.
1175:.
1150:.
1125:.
1098:.
1068:.
1020:.
1010:.
998:.
965:.
955:.
943:.
917:.
907:53
905:.
878:.
853:.
841:^
824:.
806:.
775:.
750:.
725:.
693:.
681:.
666:^
649::
647:}}
643:{{
635:.
631:.
593:.
564:.
534:.
524:.
512:.
493:^
471:or
177:.
88:.
1343:e
1336:t
1329:v
1312:.
1286:.
1260:.
1234:.
1222::
1199:.
1161:.
1136:.
1110:.
1084:.
1035:.
1006::
980:.
951::
925:.
913::
890:.
864:.
835:.
810:.
791:.
761:.
736:.
710:.
689::
660:)
656:(
633:2
613:.
575:.
549:.
520::
442:.
428:.
319:.
227:C
70:C
34:.
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.