Skip to content

Conversation

@Dretch
Copy link
Contributor

@Dretch Dretch commented Jan 4, 2014

No description provided.

@Dretch
Copy link
Contributor Author

Dretch commented Jan 4, 2014

r? @alexcrichton

@bors bors closed this Jan 5, 2014
@bors bors merged commit 195b23b into rust-lang:master Jan 5, 2014
@Dretch Dretch deleted the write_char branch January 5, 2014 15:15
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 11, 2023
…=xFrednet,djc

[`slow_vector_initialization`]: clarify why `Vec::new()` + resize is worse

rust-lang#11198 extended this lint to also warn on `Vec::new()` + `resize(0, len)`, but did not update the lint documentation, so it left some confused (rust-lang/rust-clippy#10938 (comment)).
This PR should make it a bit more clear. (cc `@djc` `@vi` what do you think about this?)

<details>
<summary>More details</summary>

Godbolt for `Vec::new()` + `.resize(x, 0)`: https://godbolt.org/z/e7q9xc9rG

The resize call first does a normal allocation (`__rust_alloc`):
```asm
alloc::raw_vec::finish_grow:
  ...
  cmp     qword ptr [rcx + 8], 0
  je      .LBB1_7  ; if capacity == 0 -> LBB1_7

.LBB1_7:
  ...
  call    qword ptr [rip + __rust_alloc@GOTPCREL]
```

*Then* a memset for zero initialization:
```asm
example::f:
  ...
  xor     esi, esi  ; 0
  call    qword ptr [rip + memset@GOTPCREL]
```
------------

Godbolt for `vec![0; len]`: https://godbolt.org/z/M3vr53vWY

Important bit:
```asm
example::f:
  ...
  call    qword ptr [rip + __rust_alloc_zeroed@GOTPCREL]
```

</details>

changelog: [`slow_vector_initialization`]: clarify why `Vec::new()` + resize is worse than `vec![0; len]`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants