Stuff in Phobos That Generates Garbage
Contents
Potential solutions
Closure allocations
CL01: Fixable by manually stack-allocating closure
A delegate is passed to some function which stores this delegate and therefore correctly doesn't mark the parameter as scope. However, the lifetime of the stored delegate is still limited to the current function (e.g. it's stored in a struct instance, but on the stack).
Can be fixed by creating a static struct{T... members; void doSomething(){access members}} instance on stack and passing &stackvar.doSomething as delegate.
CL02: Using delegates to add state to ranges
---- return iota(dim). filter!(i => ptr[i])(). map!(i => BitsSet!size_t(ptr[i], i * bitsPerSizeT))(). joiner(); ---- This code adds state to ranges without declaring a new type: the ptr variable is not accessible and needs to be move into a closure. Declaring a custom range type is a solution, but not straightforward: If the ptr field is moved into the range a closure is not necessary. But if the range is copied, it's address changes and the delegate passed to map is now invalid.
CL03: Functions taking delegates as generic parameters
receiveTimeout,receive,formattedWrite accept different types, including delegates. The delegates can all be scope to avoid the allocation but is void foo(T)(scope T) a good idea? The alternative is probably making an overload for delegates with scope attribute.
(The result is that all functions calling receiveTimeout,... with a delegate allocate a closure)
CL04: Solvable with manual memory management
Some specific functions can't be easily fixed, but the delegates they create have a well defined lifetime (for example spawn creates a delegate which is only needed at the startup of a new thread, it's never used again). These could be malloc+freed.
CL05: Design issue
These functions generally create a delegate using variables passed in as parameters. There's no way to avoid closures here. Although manual allocation is an possible, the lifetime is undefined and can only be managed by the GC.
CL06: Other
Two cases can be fixed by moving a buffer into a struct or moving a function out of a member function into it's surrounding class.
Labeled data
Here are the results based on the compiler's report (building Phobos unittests with -vgc flag of DMD).
For templates only code that is _instantiated_ by unittests build is accounted for (~ all covered code).
The tool used to post-process -vgc output can be found here, it's not tied to Phobos and should work with any github-based project (to be extended).
Module | Artifact | Reason | Possible Fix(es) |
---|---|---|---|
std.algorithm | BoyerMooreFinder.this | 'new' causes GC allocation; | |
std.algorithm | Levenshtein.AllocMatrix | 'delete' requires GC; | |
std.algorithm | Levenshtein.path | operator ~= may cause GC allocation 1 2 3 | |
std.algorithm | SplitterResult.front | 'new' causes GC allocation 1 | If version(assert) is defined this will throw a new RangeError for an empty range. |
std.algorithm | SplitterResult.popFront | 'new' causes GC allocation 1 | If version(assert) is defined this will throw a new RangeError for an empty range. |
std.algorithm | TimSortImpl.ensureCapacity | setting 'length' may cause GC allocation 1 | |
std.algorithm | TimSortImpl.sort | setting 'length' may cause GC allocation 1 | |
std.algorithm | back | 'new' causes GC allocation 1 | If version(assert) is defined this will throw a new RangeError for an empty range. |
std.algorithm | castSwitch | 'new' causes GC allocation; | |
std.algorithm | commonPrefix | 'new' causes GC allocation 1 | |
std.algorithm | front | 'new' causes GC allocation 1 | If version(assert) is defined this will throw a new RangeError for an empty range. |
std.algorithm | largestPartialIntersection | using closure causes GC allocation 1 | |
std.algorithm | largestPartialIntersectionWeighted.heapComp | indexing an associative array may cause GC allocation 1 | |
std.algorithm | makeIndex | operator ~ may cause GC allocation; | |
std.algorithm | popBack | 'new' causes GC allocation 1 | If version(assert) is defined this will throw a new RangeError for an empty range. |
std.algorithm | popFront | 'new' causes GC allocation 1 | If version(assert) is defined this will throw a new RangeError for an empty range. |
std.algorithm | predSwitch | 'new' causes GC allocation 1 2 | |
std.algorithm | reduce.reduceImpl | 'new' causes GC allocation 1 | This is a throw when empty range and no seed. |
std.algorithm | rndstuff | 'new' causes GC allocation; | |
std.algorithm | splitter.front | 'new' causes GC allocation 1 | If version(assert) is defined this will throw a new RangeError for an empty range. |
std.algorithm | splitter.popFront | 'new' causes GC allocation 1 | If version(assert) is defined this will throw a new RangeError for an empty range. |
std.array | Appender.this | 'new' causes GC allocation; | |
std.array | array | operator ~= may cause GC allocation 1 | |
std.array | arrayAllocImpl | 'new' causes GC allocation; | |
std.array | assocArray | indexing an associative array may cause GC allocation 1 | |
std.array | ensureAddable | 'new' causes GC allocation;
operator ~= may cause GC allocation; setting 'length' may cause GC allocation 1 2 3 4 |
|
std.array | insertInPlace.putDChar | setting 'length' may cause GC allocation 1 | |
std.array | insertInPlace.trustedMemcopy | setting 'length' may cause GC allocation 1 | |
std.array | replace | 'new' causes GC allocation 1 | |
std.array | replaceInPlace | operator ~ may cause GC allocation 1 | |
std.array | replaceSlice | 'new' causes GC allocation 1 | |
std.array | replicate | 'new' causes GC allocation 1 | |
std.array | split | operator ~= may cause GC allocation 1 2 | |
std.base64 | Base64Impl.Decoder.doDecoding | operator ~= may cause GC allocation; | |
std.base64 | Base64Impl.Decoder.popFront | 'new' causes GC allocation 1 2 3 4 | |
std.base64 | Base64Impl.Decoder.popFront.endCondition | 'new' causes GC allocation 1 | |
std.base64 | Base64Impl.Encoder.doEncoding | setting 'length' may cause GC allocation 1 | |
std.base64 | Base64Impl.Encoder.popFront | 'new' causes GC allocation 1 2 | |
std.base64 | Base64Impl.decode | 'new' causes GC allocation 1 2 | |
std.base64 | Base64Impl.decodeChar | 'new' causes GC allocation; | |
std.base64 | Base64Impl.encode | 'new' causes GC allocation 1 | |
std.base64 | Base64Impl.realDecodeLength | 'new' causes GC allocation 1 | |
std.bigint | checkDivByZero | 'new' causes GC allocation 1 | |
std.bigint | toDecimalString | operator ~= may cause GC allocation 1 | |
std.bigint | toHex | operator ~= may cause GC allocation 1 | |
std.bigint | toString | 'new' causes GC allocation; | |
std.bitmanip | length | setting 'length' may cause GC allocation 1 | |
std.bitmanip | myToString | operator ~ may cause GC allocation 1 | |
std.bitmanip | myToStringx | operator ~ may cause GC allocation 1 | |
std.bitmanip | toString | 'new' causes GC allocation;
operator ~ may cause GC allocation; using closure causes GC allocation 1 2 3 |
CL2 |
std.complex | Complex.toString | operator ~= may cause GC allocation; | CL3 |
std.concurrency | List.put | 'new' causes GC allocation 1 | |
std.concurrency | MessageBox.get.onLinkDeadMsg | 'new' causes GC allocation 1 2 | |
std.concurrency | MessageBox.get.pty | 'new' causes GC allocation 1 | |
std.concurrency | MessageBox.this | 'new' causes GC allocation 1 2 3 | |
std.concurrency | _spawn | 'new' causes GC allocation; | |
std.concurrency | onCrowdingThrow | 'new' causes GC allocation 1 | |
std.concurrency | receiveOnly | 'new' causes GC allocation 1 | |
std.concurrency | register | indexing an associative array may cause GC allocation; | |
std.concurrency | this | 'new' causes GC allocation; | CL4 |
std.concurrency | thisTid | 'new' causes GC allocation 1 | |
std.container.array | back | 'new' causes GC allocation 1 2 | |
std.container.array | front | 'new' causes GC allocation 1 2 | |
std.container.array | moveAt | 'new' causes GC allocation 1 | |
std.container.array | moveBack | 'new' causes GC allocation 1 | |
std.container.array | moveFront | 'new' causes GC allocation 1 | |
std.container.array | opIndex | 'new' causes GC allocation 1 2 | |
std.container.array | opSlice | 'new' causes GC allocation 1 2 | |
std.container.array | opSliceAssign | 'new' causes GC allocation 1 2 | |
std.container.array | opSliceOpAssign | 'new' causes GC allocation 1 2 | |
std.container.array | opSliceUnary | 'new' causes GC allocation 1 2 | |
std.container.array | popBack | 'new' causes GC allocation 1 | |
std.container.array | popFront | 'new' causes GC allocation 1 | |
std.container.dlist | DList.createNode | 'new' causes GC allocation 1 | |
std.container.dlist | DList.initialize | 'new' causes GC allocation 1 | |
std.container.rbtree | RBNode.dup | 'new' causes GC allocation 1 | |
std.container.rbtree | RedBlackTree.allocate | 'new' causes GC allocation 1 | |
std.container.rbtree | RedBlackTree.check.recurse | 'new' causes GC allocation;
operator ~ may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
|
std.container.rbtree | RedBlackTree.dup | 'new' causes GC allocation 1 | |
std.container.rbtree | redBlackTree | 'new' causes GC allocation 1 2 3 4 | |
std.container.slist | SList.initialize | 'new' causes GC allocation 1 | |
std.container.slist | SList.insertFront | 'new' causes GC allocation 1 2 | |
std.container.util | make.make | 'new' causes GC allocation 1 | |
std.conv | convError | 'new' causes GC allocation 1 2 | |
std.conv | parse | 'new' causes GC allocation;
indexing an associative array may cause GC allocation; operator ~ may cause GC allocation; operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
std.conv | parse.bailOut | 'new' causes GC allocation 1 | |
std.conv | parseError | 'new' causes GC allocation 1 | |
std.conv | parseEscape | operator ~ may cause GC allocation 1 | |
std.conv | strippedOctalLiteral | operator ~= may cause GC allocation 1 | |
std.conv | textImpl | operator ~= may cause GC allocation 1 | |
std.conv | toImpl | 'new' causes GC allocation;
indexing an associative array may cause GC allocation; operator ~ may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
|
std.cstream | seek | 'new' causes GC allocation 1 | |
std.cstream | this | 'new' causes GC allocation 1 2 3 | |
std.csv | CsvReader.this | 'new' causes GC allocation;
indexing an associative array may cause GC allocation; operator ~ may cause GC allocation; operator ~= may cause GC allocation; setting 'length' may cause GC allocation 1 2 3 4 5 6 7 8 9 |
|
std.csv | csvNextToken | 'new' causes GC allocation 1 2 3 | |
std.csv | popFront | 'new' causes GC allocation 1 2 | |
std.csv | prime | 'new' causes GC allocation;
indexing an associative array may cause GC allocation 1 2 3 4 5 |
|
std.csv | toString | operator ~ may cause GC allocation 1 | |
std.datetime | Clock.currStdTime | 'new' causes GC allocation 1 | |
std.datetime | DosFileTimeToSysTime | 'new' causes GC allocation 1 2 | |
std.datetime | Interval._enforceNotEmpty | 'new' causes GC allocation 1 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception, but then the line number would not be in the correct spot, since it's essentially like enforce. A better approach would be to get rid of the function and then pre-allocate an exception for each place it was being called, but that would be pre-allocating several exceptions, since many of Interval's functions call it. |
std.datetime | Interval.begin | 'new' causes GC allocation 1 | Throws a DateTimeException on bad input. This could be changed to a pre-allocated exception. |
std.datetime | Interval.end | 'new' causes GC allocation 1 | Throws a DateTimeException on bad input. This could be changed to a pre-allocated exception. |
std.datetime | Interval.expand | 'new' causes GC allocation 1 2 3 4 5 6 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception. |
std.datetime | Interval.intersection | 'new' causes GC allocation 1 2 3 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception, but then the error message wouldn't contain the bad input and would therefore be less informative. |
std.datetime | Interval.merge | 'new' causes GC allocation 1 2 3 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception, but then the error message wouldn't contain the bad input and would therefore be less informative. |
std.datetime | Interval.shift | 'new' causes GC allocation 1 2 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception. |
std.datetime | Interval.this | 'new' causes GC allocation 1 2 | Throws a DateTimeException on bad input. This could be changed to a pre-allocated exception. |
std.datetime | IntervalRange._enforceCorrectDirection | 'new' causes GC allocation 1 2 | |
std.datetime | IntervalRange._enforceNotEmpty | 'new' causes GC allocation 1 | |
std.datetime | NegInfInterval.intersection | 'new' causes GC allocation 1 2 | |
std.datetime | NegInfInterval.merge | 'new' causes GC allocation 1 | |
std.datetime | NegInfIntervalRange._enforceCorrectDirection | 'new' causes GC allocation 1 | |
std.datetime | PosInfInterval.intersection | 'new' causes GC allocation 1 2 | |
std.datetime | PosInfInterval.merge | 'new' causes GC allocation 1 | |
std.datetime | PosInfIntervalRange._enforceCorrectDirection | 'new' causes GC allocation 1 | |
std.datetime | SysTimeToDosFileTime | 'new' causes GC allocation 1 2 | |
std.datetime | _enforceValidTZFile | 'new' causes GC allocation 1 | |
std.datetime | dayOfYear | 'new' causes GC allocation 1 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception. |
std.datetime | enforceValid | 'new' causes GC allocation 1 2 3 4 5 | |
std.datetime | everyDayOfWeek | using closure causes GC allocation 1 | CL5 |
std.datetime | everyDuration | using closure causes GC allocation 1 | CL5 |
std.datetime | expand | using closure causes GC allocation 1 | CL5 |
std.datetime | fracSec | 'new' causes GC allocation 1 | |
std.datetime | fracSecs | 'new' causes GC allocation 1 2 | |
std.datetime | fracSecsFromISOString | 'new' causes GC allocation 1 2 3 | |
std.datetime | fromISOExtString | 'new' causes GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception, but then the error message wouldn't contain the bad input and would therefore be less informative. |
std.datetime | fromISOString | 'new' causes GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception, but then the error message wouldn't contain the bad input and would therefore be less informative. |
std.datetime | fromSimpleString | 'new' causes GC allocation 1 2 3 4 5 6 7 8 9 10 11 | Throws a new DateTimeException on bad input. This could be changed to a pre-allocated exception, but then the error message wouldn't contain the bad input and would therefore be less informative. |
std.datetime | func | using closure causes GC allocation 1 | CL5 |
std.datetime | getInstalledTZNames | 'new' causes GC allocation 1 2 | |
std.datetime | getTimeZone | 'new' causes GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
std.datetime | initializeTests | array literal may cause GC allocation;
associative array literal may cause GC allocation; indexing an associative array may cause GC allocation; operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
std.datetime | monthFromString | 'new' causes GC allocation 1 | |
std.datetime | parseRFC822DateTime | 'new' causes GC allocation 1 2 3 4 5 6 7 8 9 | |
std.datetime | parseRFC822DateTime.parseTZ | 'new' causes GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
std.datetime | parseRFC822DateTime.stripAndCheckLen | 'new' causes GC allocation 1 | |
std.datetime | readVal | 'new' causes GC allocation 1 | |
std.datetime | testBadParse822 | 'new' causes GC allocation 1 | |
std.datetime | testParse822 | 'new' causes GC allocation 1 | |
std.datetime | this | 'new' causes GC allocation 1 2 3 | |
std.datetime | toISOExtString | operator ~ may cause GC allocation 1 2 | |
std.datetime | toISOString | operator ~ may cause GC allocation 1 2 | |
std.datetime | toSimpleString | operator ~ may cause GC allocation 1 2 | |
std.datetime | yearBC | 'new' causes GC allocation 1 2 | |
std.digest.digest | toHexString | 'new' causes GC allocation 1 | string toHexString(ubyte[] data): Provide ouput range and/or RCString overload |
std.encoding | **** | operator ~= may cause GC allocation 1 | |
std.encoding | EncodingScheme.create | 'new' causes GC allocation; | |
std.encoding | EncodingScheme.register | 'new' causes GC allocation;
indexing an associative array may cause GC allocation; operator ~ may cause GC allocation 1 2 3 |
|
std.encoding | EncodingScheme.sanitize | 'new' causes GC allocation 1 | |
std.encoding | makeReadable | operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
std.encoding | names | array literal may cause GC allocation 1 2 3 4 5 6 | |
std.encoding | sanitize | 'new' causes GC allocation 1 | |
std.encoding | transcode | 'new' causes GC allocation; | |
std.encoding | transcodeReverse | operator ~ may cause GC allocation 1 | |
std.exception | assertNotThrown | 'new' causes GC allocation; | |
std.exception | assertThrown | 'new' causes GC allocation 1 | |
std.exception | assumeWontThrow | 'new' causes GC allocation; | |
std.exception | bailOut | 'new' causes GC allocation 1 2 | |
std.exception | enforceEx.enforceEx | 'new' causes GC allocation 1 2 | |
std.exception | errnoEnforce | 'new' causes GC allocation 1 | |
std.exception | this | operator ~ may cause GC allocation 1 | |
std.file | _ensureLStatDone | operator ~ may cause GC allocation 1 | |
std.file | _ensureStatDone | operator ~ may cause GC allocation 1 | |
std.file | cenforce | 'new' causes GC allocation 1 | |
std.file | deleteme | operator ~ may cause GC allocation 1 | |
std.file | ensureDirExists | 'new' causes GC allocation 1 | |
std.file | popFront | using closure causes GC allocation 1 | |
std.file | read | 'delete' requires GC 1 | |
std.file | readLink | 'new' causes GC allocation; | |
std.file | remove | operator ~ may cause GC allocation 1 | |
std.file | rmdirRecurse | 'new' causes GC allocation 1 | |
std.file | this | 'new' causes GC allocation 1 | |
std.format | FormatSpec.fillUp | 'new' causes GC allocation 1 2 | |
std.format | doFormat.formatArg.putAArray | 'new' causes GC allocation; | |
std.format | doFormat.formatArg.putreal | 'new' causes GC allocation 1 | |
std.format | doFormat.getFmtChar | 'new' causes GC allocation 1 | |
std.format | doFormat.getFmtInt | 'new' causes GC allocation 1 2 | |
std.format | doFormat.getFmtStar | 'new' causes GC allocation 1 2 | |
std.format | formatNth.gencode | operator ~ may cause GC allocation; | |
std.format | formatRange | 'new' causes GC allocation 1 | |
std.format | getNthInt | 'new' causes GC allocation 1 2 | |
std.format | primitiveTypeInfo | associative array literal may cause GC allocation 1 | |
std.format | singleSpec | 'new' causes GC allocation 1 2 3 | |
std.format | unformatRange | indexing an associative array may cause GC allocation; | |
std.functional | memoize.memoize | indexing an associative array may cause GC allocation 1 | |
std.functional | partial.partial.errormsg | operator ~= may cause GC allocation 1 2 | |
std.getopt | getoptImpl | 'new' causes GC allocation;
operator ~ may cause GC allocation; operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
std.getopt | handleOption | operator ~ may cause GC allocation; | |
std.getopt | handleOption.setHash | indexing an associative array may cause GC allocation 1 | |
std.getopt | splitAndGet | operator ~ may cause GC allocation 1 2 3 | |
std.internal.math.biguintcore | **** | array literal may cause GC allocation 1 | |
std.internal.math.biguintcore | add | 'new' causes GC allocation 1 | |
std.internal.math.biguintcore | addInt | 'new' causes GC allocation 1 | |
std.internal.math.biguintcore | biguintFromDecimal | 'new' causes GC allocation 1 | |
std.internal.math.biguintcore | biguintToDecimal | setting 'length' may cause GC allocation 1 | |
std.internal.math.biguintcore | blockDivMod | 'delete' requires GC; | |
std.internal.math.biguintcore | div | 'new' causes GC allocation; | |
std.internal.math.biguintcore | divInt | 'new' causes GC allocation 1 | |
std.internal.math.biguintcore | divModInternal | 'delete' requires GC; | |
std.internal.math.biguintcore | fromDecimalString | 'new' causes GC allocation;
array literal may cause GC allocation; setting 'length' may cause GC allocation 1 2 3 |
|
std.internal.math.biguintcore | fromHexString | 'new' causes GC allocation; | |
std.internal.math.biguintcore | includeSign | 'new' causes GC allocation 1 | |
std.internal.math.biguintcore | mod | 'new' causes GC allocation; | |
std.internal.math.biguintcore | modInt | 'delete' requires GC; | |
std.internal.math.biguintcore | mul | 'new' causes GC allocation; | |
std.internal.math.biguintcore | mulInternal | 'delete' requires GC; | |
std.internal.math.biguintcore | opAssign | array literal may cause GC allocation 1 2 3 4 5 6 | |
std.internal.math.biguintcore | opShl | 'new' causes GC allocation 1 | |
std.internal.math.biguintcore | pow | 'new' causes GC allocation; | |
std.internal.math.biguintcore | squareInternal | 'delete' requires GC; | |
std.internal.math.biguintcore | sub | 'new' causes GC allocation 1 2 | |
std.internal.math.biguintcore | subInt | 'new' causes GC allocation 1 | |
std.internal.math.biguintcore | toDecimalString | 'new' causes GC allocation 1 | |
std.internal.math.biguintcore | toHexString | 'new' causes GC allocation 1 | |
std.json | assign | 'new' causes GC allocation; | |
std.json | opBinary | operator ~= may cause GC allocation 1 | |
std.json | opIndex | operator ~ may cause GC allocation 1 | |
std.json | opIndexAssign | indexing an associative array may cause GC allocation 1 | |
std.json | opOpAssign | operator ~= may cause GC allocation 1 | |
std.json | parseJSON.error | 'new' causes GC allocation 1 | |
std.json | parseJSON.parseValue | indexing an associative array may cause GC allocation; | |
std.json | toJSON.toString | 'new' causes GC allocation 1 | |
std.json | toJSON.toValue.emit | indexing an associative array may cause GC allocation 1 | |
std.mmfile | this | operator ~ may cause GC allocation 1 2 3 | |
std.net.curl | **** | using closure causes GC allocation 1 | CL1 |
std.net.curl | AsyncLineInputRange.this | 'new' causes GC allocation 1 | |
std.net.curl | Pool.push | 'new' causes GC allocation 1 | |
std.net.curl | WorkerThreadProtocol.wait | using closure causes GC allocation 1 | CL3 |
std.net.curl | _basicFTP | operator ~= may cause GC allocation 1 | |
std.net.curl | _basicHTTP | indexing an associative array may cause GC allocation;
operator ~= may cause GC allocation; using closure causes GC allocation 1 2 3 4 5 |
CL1 |
std.net.curl | _finalizeAsyncChunks | setting 'length' may cause GC allocation; | CL3 |
std.net.curl | _getForRange | using closure causes GC allocation 1 | CL3 |
std.net.curl | _receiveAsyncLines | operator ~= may cause GC allocation;
setting 'length' may cause GC allocation; using closure causes GC allocation 1 2 3 |
CL3 |
std.net.curl | _spawnAsync | 'new' causes GC allocation; | |
std.net.curl | byLine.popFront | array literal may cause GC allocation 1 2 | |
std.net.curl | clearIfSupported | using closure causes GC allocation 1 | CL5 |
std.net.curl | decodeLineInto | operator ~= may cause GC allocation;
setting 'length' may cause GC allocation; using closure causes GC allocation 1 2 3 4 5 |
CL5 |
std.net.curl | decodeString | operator ~= may cause GC allocation 1 | |
std.net.curl | del | operator ~ may cause GC allocation; | CL1 |
std.net.curl | download | 'new' causes GC allocation; | CL1 |
std.net.curl | dup | using closure causes GC allocation 1 | CL5 |
std.net.curl | onReceive | using closure causes GC allocation 1 | CL5 |
std.net.curl | onReceiveHeader | indexing an associative array may cause GC allocation; | CL5 |
std.net.curl | onSeek | using closure causes GC allocation 1 | CL5 |
std.net.curl | onSend | using closure causes GC allocation 1 | CL5 |
std.net.curl | onSocketOption | using closure causes GC allocation 1 | CL5 |
std.net.curl | push | using closure causes GC allocation 1 | CL5 |
std.net.curl | this | 'new' causes GC allocation 1 | |
std.net.curl | upload | 'new' causes GC allocation 1 | |
std.net.curl | url | operator ~ may cause GC allocation 1 2 | |
std.net.isemail | isEmail | 'new' causes GC allocation;
array literal may cause GC allocation; associative array literal may cause GC allocation; indexing an associative array may cause GC allocation; operator ~ may cause GC allocation; operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
|
std.net.isemail | substr | using closure causes GC allocation 1 | CL2 |
std.numeric | Fft.this | 'new' causes GC allocation 1 | |
std.outbuffer | **** | setting 'length' may cause GC allocation 1 | |
std.parallelism | RoundRobinBuffer.this | setting 'length' may cause GC allocation 1 2 | |
std.parallelism | Task.executeInNewThread | 'new' causes GC allocation 1 2 | |
std.parallelism | TaskPool.abstractPutGroupNoSync | 'new' causes GC allocation 1 | |
std.parallelism | TaskPool.popNoSync | 'new' causes GC allocation 1 | |
std.parallelism | TaskPool.this | 'new' causes GC allocation 1 2 3 4 5 6 7 | |
std.parallelism | asyncBuf.AsyncBuf.this | setting 'length' may cause GC allocation 1 2 | |
std.parallelism | foreachErr | 'new' causes GC allocation 1 | |
std.parallelism | initialize | 'new' causes GC allocation 1 | |
std.parallelism | map.map.Map.dumpToFrom | setting 'length' may cause GC allocation 1 | |
std.parallelism | map.map.Map.this | setting 'length' may cause GC allocation 1 2 3 | |
std.parallelism | parallel | using closure causes GC allocation 1 | CL4 |
std.parallelism | popFront | 'new' causes GC allocation; | CL4 |
std.parallelism | reduce.reduce.reduceOnRange | 'new' causes GC allocation 1 | |
std.parallelism | submitAndExecute | 'new' causes GC allocation 1 | |
std.parallelism | task | 'new' causes GC allocation 1 2 3 | |
std.parallelism | taskPool | 'new' causes GC allocation 1 | |
std.path | absolutePath | 'new' causes GC allocation 1 | |
std.path | buildNormalizedPath | 'new' causes GC allocation 1 2 | |
std.path | buildPath | 'new' causes GC allocation; | |
std.path | defaultExtension | operator ~ may cause GC allocation 1 2 | |
std.path | expandTilde.combineCPathWithDPath | operator ~= may cause GC allocation 1 | |
std.path | expandTilde.expandFromDatabase | operator ~ may cause GC allocation 1 2 | |
std.path | globMatch | operator ~ may cause GC allocation 1 | |
std.path | relativePath | 'new' causes GC allocation; | |
std.path | setExtension | operator ~ may cause GC allocation; | |
std.process | Pid.performWait | 'new' causes GC allocation 1 | |
std.process | _spawnvp | 'new' causes GC allocation; | |
std.process | charAllocator | 'new' causes GC allocation 1 | |
std.process | createEnv | 'new' causes GC allocation; | |
std.process | environment.opIndex | operator ~ may cause GC allocation 1 | |
std.process | environment.opIndexAssign | operator ~ may cause GC allocation 1 | |
std.process | environment.toAA | indexing an associative array may cause GC allocation 1 | |
std.process | escapeShellArguments.allocator | 'new' causes GC allocation; | |
std.process | escapeWindowsShellCommand | 'new' causes GC allocation 1 2 | |
std.process | execvpe_ | operator ~ may cause GC allocation 1 | |
std.process | newFromErrno | 'new' causes GC allocation; | |
std.process | pipe | 'new' causes GC allocation 1 2 3 | |
std.process | pipeProcessImpl | 'new' causes GC allocation 1 2 | |
std.process | shell | operator ~= may cause GC allocation 1 | |
std.process | spawnProcessImpl | 'new' causes GC allocation; | |
std.process | stderr | 'new' causes GC allocation 1 | |
std.process | stdin | 'new' causes GC allocation 1 | |
std.process | stdout | 'new' causes GC allocation 1 | |
std.process | this | operator ~ may cause GC allocation 1 2 | |
std.process | uniqueTempPath | operator ~ may cause GC allocation 1 | |
std.random | MersenneTwisterEngine.seed | 'new' causes GC allocation 1 | |
std.random | RandomCover.this | setting 'length' may cause GC allocation 1 2 | |
std.random | uniformDistribution | setting 'length' may cause GC allocation 1 | |
std.range | InputRangeObject.save | 'new' causes GC allocation 1 | |
std.range | OnlyResult.opIndex | 'new' causes GC allocation 1 2 3 | |
std.range | OnlyResult.opSlice | 'new' causes GC allocation 1 2 3 | |
std.range | Zip.tryGetInit | 'new' causes GC allocation 1 | |
std.range | inputRangeObject | 'new' causes GC allocation 1 | |
std.range | lockstepMixin | operator ~= may cause GC allocation 1 2 3 4 5 6 | |
std.range | opSlice | 'new' causes GC allocation 1 | |
std.range | outputRangeObject.outputRangeObject | 'new' causes GC allocation 1 | |
std.range | popBackN | 'new' causes GC allocation 1 2 3 | |
std.range | put | array literal may cause GC allocation 1 | |
std.range | putChar | array literal may cause GC allocation 1 | |
std.range | putMethods | operator ~ may cause GC allocation; | |
std.range | roundRobin.front.makeSwitch | operator ~ may cause GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
std.range | roundRobin.popFront.makeSwitchIncrementCounter | operator ~ may cause GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
std.range | roundRobin.popFront.makeSwitchPopFront | operator ~ may cause GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
std.regex.internal.backtracking | ctAtomCode | operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
std.regex.internal.backtracking | ctGenAlternation | operator ~ may cause GC allocation; | |
std.regex.internal.backtracking | ctGenBlock | operator ~= may cause GC allocation 1 | |
std.regex.internal.backtracking | ctGenFixupCode | operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 | |
std.regex.internal.backtracking | ctGenGroup | operator ~ may cause GC allocation; | |
std.regex.internal.backtracking | ctGenRegEx | operator ~= may cause GC allocation 1 2 3 4 | |
std.regex.internal.backtracking | ctSub | operator ~ may cause GC allocation 1 | |
std.regex.internal.backtracking | restoreCode | operator ~= may cause GC allocation 1 2 3 4 5 | |
std.regex.internal.backtracking | saveCode | operator ~= may cause GC allocation 1 2 3 4 5 | |
std.regex.internal.ir | disassemble | operator ~ may cause GC allocation 1 2 | |
std.regex.internal.ir | getTrie | indexing an associative array may cause GC allocation 1 | |
std.regex.internal.kickstart | ShiftOr.fetch | setting 'length' may cause GC allocation 1 | |
std.regex.internal.kickstart | ShiftOr.this | 'new' causes GC allocation; | |
std.regex.internal.parser | caseEnclose | operator ~= may cause GC allocation 1 | |
std.regex.internal.parser | charsetToIr | operator ~= may cause GC allocation 1 2 3 | |
std.regex.internal.parser | error | 'new' causes GC allocation 1 | |
std.regex.internal.parser | getTrie | indexing an associative array may cause GC allocation 1 | |
std.regex.internal.parser | lightPostprocess | 'new' causes GC allocation 1 2 | |
std.regex.internal.parser | markBackref | setting 'length' may cause GC allocation 1 | |
std.regex.internal.parser | parseFlags | 'new' causes GC allocation 1 2 | |
std.regex.internal.parser | parseQuantifier | operator ~= may cause GC allocation; | |
std.regex.internal.parser | parseRegex | operator ~= may cause GC allocation 1 2 | |
std.regex.internal.parser | parseUniHex | 'new' causes GC allocation 1 | |
std.regex.internal.parser | put | operator ~= may cause GC allocation 1 | |
std.regex.internal.parser | putRaw | operator ~= may cause GC allocation 1 | |
std.regex.internal.parser | reverseBytecode | 'new' causes GC allocation 1 | |
std.regex.package | Captures.newMatches | 'new' causes GC allocation 1 | |
std.socket | Address.toHostString | 'new' causes GC allocation; | |
std.socket | Address.toServiceString | 'new' causes GC allocation; | |
std.socket | Address.toString | operator ~ may cause GC allocation 1 2 | |
std.socket | InternetHost.populate | 'new' causes GC allocation 1 2 | |
std.socket | InternetHost.validHostent | 'new' causes GC allocation 1 | |
std.socket | Protocol.populate | 'new' causes GC allocation 1 | |
std.socket | Service.populate | 'new' causes GC allocation 1 | |
std.socket | Socket.accept | 'new' causes GC allocation 1 | |
std.socket | Socket.accepting | 'new' causes GC allocation 1 | |
std.socket | Socket.bind | 'new' causes GC allocation 1 | |
std.socket | Socket.blocking | 'new' causes GC allocation 1 | |
std.socket | Socket.connect | 'new' causes GC allocation 1 | |
std.socket | Socket.createAddress | 'new' causes GC allocation 1 2 3 | |
std.socket | Socket.getOption | 'new' causes GC allocation; | |
std.socket | Socket.hostName | 'new' causes GC allocation 1 | |
std.socket | Socket.listen | 'new' causes GC allocation 1 | |
std.socket | Socket.localAddress | 'new' causes GC allocation 1 2 | |
std.socket | Socket.remoteAddress | 'new' causes GC allocation 1 2 | |
std.socket | Socket.select | 'new' causes GC allocation 1 | |
std.socket | Socket.setOption | 'new' causes GC allocation; | |
std.socket | Socket.this | 'new' causes GC allocation 1 2 | |
std.socket | SocketSet.add | setting 'length' may cause GC allocation 1 2 | |
std.socket | SocketSet.resize | setting 'length' may cause GC allocation 1 | |
std.socket | SocketSet.setMinCapacity | setting 'length' may cause GC allocation 1 | |
std.socket | getAddress | 'new' causes GC allocation;
operator ~= may cause GC allocation; setting 'length' may cause GC allocation 1 2 3 4 5 |
|
std.socket | getAddressInfoImpl | 'new' causes GC allocation 1 2 3 | |
std.socket | parse | 'new' causes GC allocation 1 | |
std.socket | parseAddress | 'new' causes GC allocation 1 2 | |
std.socket | serviceToPort | 'new' causes GC allocation 1 | |
std.socket | socketPair | 'new' causes GC allocation 1 | |
std.socket | socketPair.toSocket | 'new' causes GC allocation 1 | |
std.socket | this | 'new' causes GC allocation; | |
std.socket | toHostNameString | 'new' causes GC allocation 1 | |
std.socketstream | seek | 'new' causes GC allocation 1 | |
std.stdio | close | operator ~ may cause GC allocation 1 2 | |
std.stdio | front | 'new' causes GC allocation 1 2 | |
std.stdio | lock | operator ~ may cause GC allocation 1 | |
std.stdio | opApply | 'new' causes GC allocation; | |
std.stdio | opApplyRaw | 'new' causes GC allocation;
operator ~= may cause GC allocation; setting 'length' may cause GC allocation 1 2 3 |
|
std.stdio | opCall | 'new' causes GC allocation 1 2 | |
std.stdio | openNetwork | 'new' causes GC allocation; | |
std.stdio | popFront | 'new' causes GC allocation 1 2 | |
std.stdio | popen | operator ~ may cause GC allocation 1 | |
std.stdio | readln | operator ~= may cause GC allocation; | |
std.stdio | readlnImpl | operator ~= may cause GC allocation; | |
std.stdio | seek | operator ~ may cause GC allocation 1 | |
std.stdio | setvbuf | operator ~ may cause GC allocation 1 2 | |
std.stdio | tell | operator ~ may cause GC allocation 1 | |
std.stdio | this | 'new' causes GC allocation; | |
std.stdio | tryLock | operator ~ may cause GC allocation 1 | |
std.stdio | unlock | operator ~ may cause GC allocation 1 | |
std.stream | Stream.assertReadable | 'new' causes GC allocation 1 | |
std.stream | Stream.assertSeekable | 'new' causes GC allocation 1 | |
std.stream | Stream.assertWriteable | 'new' causes GC allocation 1 | |
std.stream | Stream.flush | setting 'length' may cause GC allocation 1 | |
std.stream | Stream.getc | setting 'length' may cause GC allocation 1 | |
std.stream | Stream.getcw | 'new' causes GC allocation; | |
std.stream | Stream.readExact | 'new' causes GC allocation 1 | |
std.stream | Stream.readLine | operator ~= may cause GC allocation; | |
std.stream | Stream.readLineW | operator ~= may cause GC allocation; | |
std.stream | Stream.readString | 'new' causes GC allocation 1 | |
std.stream | Stream.readStringW | 'new' causes GC allocation 1 | |
std.stream | Stream.toString | 'new' causes GC allocation; | |
std.stream | Stream.ungetc | operator ~= may cause GC allocation; | |
std.stream | Stream.ungetcw | operator ~= may cause GC allocation; | |
std.stream | Stream.vreadf | operator ~= may cause GC allocation 1 2 | |
std.stream | Stream.writeExact | 'new' causes GC allocation 1 | |
std.stream | TreadLine.readLine | operator ~= may cause GC allocation 1 | |
std.stream | available | 'new' causes GC allocation 1 | |
std.stream | close | 'delete' requires GC 1 | |
std.stream | data | 'new' causes GC allocation 1 | |
std.stream | flush | 'new' causes GC allocation 1 | |
std.stream | getcw | 'new' causes GC allocation; | |
std.stream | open | 'new' causes GC allocation; | |
std.stream | readStringW | 'new' causes GC allocation 1 | |
std.stream | reserve | setting 'length' may cause GC allocation 1 | |
std.stream | seek | 'new' causes GC allocation 1 | |
std.stream | this | 'new' causes GC allocation 1 2 3 | |
std.string | **** | 'new' causes GC allocation 1 | |
std.string | abbrev | indexing an associative array may cause GC allocation 1 2 | |
std.string | center | 'new' causes GC allocation 1 2 | |
std.string | detab | setting 'length' may cause GC allocation 1 2 3 | |
std.string | entab | setting 'length' may cause GC allocation 1 2 | |
std.string | entab.change | setting 'length' may cause GC allocation 1 2 | |
std.string | format | 'new' causes GC allocation; | CL6 |
std.string | isNumeric | 'new' causes GC allocation 1 | |
std.string | leftJustify | 'new' causes GC allocation 1 2 | |
std.string | makeTrans | 'new' causes GC allocation 1 | |
std.string | outdent | 'new' causes GC allocation 1 | |
std.string | rightJustify | 'new' causes GC allocation 1 2 | |
std.string | sformat | 'new' causes GC allocation 1 | |
std.string | succ | 'new' causes GC allocation 1 | |
std.string | translate | 'new' causes GC allocation 1 | |
std.string | translateImpl | indexing an associative array may cause GC allocation 1 | |
std.string | wrap | operator ~= may cause GC allocation;
setting 'length' may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 |
|
std.syserror | SysError.msg | 'new' causes GC allocation 1 | |
std.traits | demangleFunctionAttributes | associative array literal may cause GC allocation; | |
std.traits | extractAttribFlags | operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
std.traits | fqnType.parametersTypeString | array literal may cause GC allocation; | |
std.traits | fun | associative array literal may cause GC allocation 1 | |
std.typecons | MemberFunctionGenerator.enumerateParameters | array literal may cause GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
std.typecons | MemberFunctionGenerator.generateCode | operator ~= may cause GC allocation 1 2 | |
std.typecons | MemberFunctionGenerator.generateCodeForOverloadSet | operator ~ may cause GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
|
std.typecons | MemberFunctionGenerator.generateFunction | operator ~= may cause GC allocation 1 | |
std.typecons | MemberFunctionGenerator.generateFunction.make_postAtts | operator ~= may cause GC allocation 1 2 3 4 5 | |
std.typecons | MemberFunctionGenerator.generateFunction.make_returnType | operator ~ may cause GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
|
std.typecons | MemberFunctionGenerator.generateFunction.make_storageClass | operator ~= may cause GC allocation 1 2 3 4 | |
std.typecons | MemberFunctionGenerator.generateParameters | array literal may cause GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
|
std.typecons | Tuple.injectNamedFields | operator ~= may cause GC allocation 1 2 | |
std.typecons | Unique.this | 'delete' requires GC 1 | |
std.typecons | alignForSize | operator ~ may cause GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
std.typecons | generateDoNothing | operator ~ may cause GC allocation; | |
std.typecons | this | operator ~ may cause GC allocation 1 | |
std.typecons | wrap.wrap.Impl.generateFun.mod | operator ~= may cause GC allocation 1 2 3 | |
std.typecons | wrap.wrap.Impl.generateFun.stc | operator ~= may cause GC allocation 1 2 3 4 5 6 | |
std.typecons | wrap.wrap.wrap | 'new' causes GC allocation 1 | |
std.uni | InversionList.this | operator ~= may cause GC allocation 1 2 | |
std.uni | MultiArray.this | 'new' causes GC allocation 1 | |
std.uni | SetSearcher.opCall | 'new' causes GC allocation; | |
std.uni | Utf16Matcher.badEncoding | 'new' causes GC allocation 1 | |
std.uni | Utf8Matcher.DefMatcher.genDispatch | operator ~= may cause GC allocation 1 2 3 | |
std.uni | Utf8Matcher.badEncoding | 'new' causes GC allocation 1 | |
std.uni | alloc | 'new' causes GC allocation 1 | |
std.uni | append | operator ~= may cause GC allocation 1 | |
std.uni | compressTo | operator ~= may cause GC allocation 1 2 3 4 5 6 | |
std.uni | dropUpTo | array literal may cause GC allocation 1 | |
std.uni | encodeTo | 'new' causes GC allocation 1 | |
std.uni | genUnrolledSwitchSearch | operator ~= may cause GC allocation 1 2 3 | |
std.uni | inverted | array literal may cause GC allocation 1 2 | |
std.uni | isPrettyPropertyName | array literal may cause GC allocation 1 | |
std.uni | length.length | setting 'length' may cause GC allocation 1 2 | |
std.uni | loadAny | 'new' causes GC allocation; | |
std.uni | normalize | operator ~= may cause GC allocation; | |
std.uni | realloc | setting 'length' may cause GC allocation 1 | |
std.uni | skipUpTo | array literal may cause GC allocation 1 | |
std.uni | testAll | using closure causes GC allocation 1 | CL5 |
std.uni | toCaseInPlaceAlloc.toCaseInPlaceAlloc | 'new' causes GC allocation 1 | |
std.uni | toSourceCode.bisect | operator ~ may cause GC allocation; | |
std.uni | toSourceCode.linearScope | operator ~ may cause GC allocation; | |
std.uni | toSourceCode.switchScope | operator ~= may cause GC allocation 1 2 | |
std.uri | URI_Decode | 'new' causes GC allocation 1 2 3 4 5 6 7 8 9 10 11 | |
std.uri | URI_Encode | 'new' causes GC allocation 1 2 3 4 5 | |
std.uri | this | operator ~ may cause GC allocation 1 | |
std.utf | decodeImpl | 'new' causes GC allocation 1 2 | |
std.utf | decodeImpl.exception | 'new' causes GC allocation 1 2 3 | |
std.utf | decodeImpl.invalidUTF | 'new' causes GC allocation 1 | |
std.utf | decodeImpl.outOfBounds | 'new' causes GC allocation 1 | |
std.utf | encode | 'new' causes GC allocation;
operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
std.utf | strideBack | 'new' causes GC allocation 1 2 | |
std.utf | strideImpl | 'new' causes GC allocation 1 | |
std.utf | testBadDecode | 'new' causes GC allocation 1 2 | |
std.utf | testDecode | 'new' causes GC allocation 1 2 3 | |
std.utf | testDecodeFront | 'new' causes GC allocation 1 2 3 | |
std.utf | this | operator ~ may cause GC allocation 1 | |
std.utf | toString | operator ~= may cause GC allocation 1 2 3 | |
std.utf | toUCSindex | 'new' causes GC allocation 1 2 | |
std.utf | toUTF16 | operator ~= may cause GC allocation; | |
std.utf | toUTF32 | setting 'length' may cause GC allocation 1 2 | |
std.utf | toUTF8 | setting 'length' may cause GC allocation 1 2 3 4 | |
std.utf | toUTFzImpl | array literal may cause GC allocation; | |
std.utf | zeroLen | 'new' causes GC allocation 1 2 3 | |
std.uuid | parseUUID.parserError | 'new' causes GC allocation 1 2 3 | throws Exception |
std.uuid | this | 'new' causes GC allocation 1 2 3 4 5 | throws Exception |
std.variant | VariantN.get | 'new' causes GC allocation 1 2 | |
std.variant | VariantN.handler | 'new' causes GC allocation 1 | |
std.variant | VariantN.handler.tryPutting | 'new' causes GC allocation;
array literal may cause GC allocation; indexing an associative array may cause GC allocation; operator ~= may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
std.variant | VariantN.opArithmetic | 'new' causes GC allocation 1 | |
std.variant | VariantN.opAssign | 'new' causes GC allocation 1 | |
std.variant | VariantN.opCmp | 'new' causes GC allocation 1 | |
std.variant | this | operator ~ may cause GC allocation 1 | |
std.variant | variantArray | operator ~= may cause GC allocation 1 | |
std.variant | visitImpl.visitGetOverloadMap | 'new' causes GC allocation 1 | |
std.xml | Check.fail | 'new' causes GC allocation 1 2 3 | |
std.xml | ElementParser.parse | 'new' causes GC allocation;
indexing an associative array may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 |
|
std.xml | Item.pretty | array literal may cause GC allocation 1 | |
std.xml | Tag.this | 'new' causes GC allocation;
indexing an associative array may cause GC allocation; operator ~ may cause GC allocation; setting 'length' may cause GC allocation 1 2 3 4 5 6 7 8 9 10 |
|
std.xml | appendItem | operator ~= may cause GC allocation 1 | |
std.xml | assertNot | 'new' causes GC allocation; | CL6 |
std.xml | check | 'new' causes GC allocation 1 | |
std.xml | checkAttValue | operator ~ may cause GC allocation 1 | |
std.xml | checkElement | operator ~ may cause GC allocation 1 | |
std.xml | checkEnd | 'new' causes GC allocation; | |
std.xml | checkLiteral | operator ~ may cause GC allocation 1 | |
std.xml | decode | 'new' causes GC allocation; | |
std.xml | exit | 'new' causes GC allocation 1 | |
std.xml | opCatAssign | operator ~= may cause GC allocation 1 2 3 4 5 | |
std.xml | parse | 'new' causes GC allocation;
indexing an associative array may cause GC allocation 1 2 3 4 5 6 |
|
std.xml | pretty | array literal may cause GC allocation;
operator ~ may cause GC allocation; operator ~= may cause GC allocation 1 2 3 4 5 6 7 |
|
std.xml | reqc | 'new' causes GC allocation 1 | |
std.xml | startOf | operator ~= may cause GC allocation 1 2 | |
std.xml | text | 'new' causes GC allocation; | |
std.xml | this | 'new' causes GC allocation;
indexing an associative array may cause GC allocation; operator ~ may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
std.xml | toNonEndString | operator ~ may cause GC allocation; | |
std.xml | toString | operator ~ may cause GC allocation; | |
std.xml | toType | 'new' causes GC allocation 1 | |
std.zip | ArchiveMember.compressionMethod | 'new' causes GC allocation 1 | |
std.zip | ArchiveMember.expandedData | setting 'length' may cause GC allocation 1 | |
std.zip | ZipArchive.addMember | indexing an associative array may cause GC allocation 1 | |
std.zip | ZipArchive.build | 'new' causes GC allocation 1 2 3 | |
std.zip | ZipArchive.this | 'new' causes GC allocation;
indexing an associative array may cause GC allocation 1 2 3 4 5 6 7 8 9 |
|
std.zip | expand | 'new' causes GC allocation 1 2 3 4 | |
std.zip | this | operator ~ may cause GC allocation 1 | |
std.zlib | Compress.error | 'new' causes GC allocation 1 | |
std.zlib | UnCompress.error | 'new' causes GC allocation 1 | |
std.zlib | compress | 'delete' requires GC;
'new' causes GC allocation; operator ~ may cause GC allocation; setting 'length' may cause GC allocation 1 2 3 4 5 6 7 8 |
|
std.zlib | flush | 'delete' requires GC; | |
std.zlib | uncompress | 'delete' requires GC;
'new' causes GC allocation; operator ~ may cause GC allocation; operator ~= may cause GC allocation; setting 'length' may cause GC allocation 1 2 3 4 5 6 7 8 9 10 11 12 13 |