docs: document v `free()` (#8995)
parent
5e02f6358c
commit
24630850a0
30
doc/docs.md
30
doc/docs.md
|
@ -2976,14 +2976,31 @@ The developer doesn't need to change anything in their code. "It just works", li
|
||||||
Python, Go, or Java, except there's no heavy GC tracing everything or expensive RC for
|
Python, Go, or Java, except there's no heavy GC tracing everything or expensive RC for
|
||||||
each object.
|
each object.
|
||||||
|
|
||||||
|
### Control
|
||||||
|
|
||||||
|
You can take advantage of V's autofree engine and define a `free()` method on custom
|
||||||
|
data types:
|
||||||
|
|
||||||
|
```v
|
||||||
|
struct MyType {}
|
||||||
|
|
||||||
|
[unsafe]
|
||||||
|
fn (data &MyType) free() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Just as the compiler frees C data types with C's `free()`, it will statically insert
|
||||||
|
`free()` calls for your data type at the end of each variable's lifetime.
|
||||||
|
|
||||||
For developers willing to have more low level control, autofree can be disabled with
|
For developers willing to have more low level control, autofree can be disabled with
|
||||||
`-manualfree`, or by adding a `[manualfree]` on each function that wants manage its
|
`-manualfree`, or by adding a `[manualfree]` on each function that wants manage its
|
||||||
memory manually.
|
memory manually. (See [attributes](#attributes)).
|
||||||
|
|
||||||
Note: right now autofree is hidden behind the -autofree flag. It will be enabled by
|
_Note: right now autofree is hidden behind the -autofree flag. It will be enabled by
|
||||||
default in V 0.3. If autofree is not used, V programs will leak memory.
|
default in V 0.3. If autofree is not used, V programs will leak memory._
|
||||||
|
|
||||||
For example:
|
### Examples
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import strings
|
import strings
|
||||||
|
@ -3006,9 +3023,8 @@ fn draw_scene() {
|
||||||
The strings don't escape `draw_text`, so they are cleaned up when
|
The strings don't escape `draw_text`, so they are cleaned up when
|
||||||
the function exits.
|
the function exits.
|
||||||
|
|
||||||
In fact, the first two calls won't result in any allocations at all.
|
In fact, with the `-prealloc` flag, the first two calls won't result in any allocations at all.
|
||||||
These two strings are small,
|
These two strings are small, so V will use a preallocated buffer for them.
|
||||||
V will use a preallocated buffer for them.
|
|
||||||
|
|
||||||
```v
|
```v
|
||||||
struct User {
|
struct User {
|
||||||
|
|
Loading…
Reference in New Issue