diff options
| author | Simon Sapin <simon.sapin@exyr.org> | 2014-07-06 01:11:13 +0100 |
|---|---|---|
| committer | Simon Sapin <simon.sapin@exyr.org> | 2014-07-06 01:11:13 +0100 |
| commit | ed3eee2e2a706d568f090f5d9862f0888dbdf670 (patch) | |
| tree | ee43e26aa4a97afec40206e6a49d2e70b19a69f4 /src | |
| parent | b8ef5cf1310a7b1e31d0993885d867a6804597ad (diff) | |
| download | rust-ed3eee2e2a706d568f090f5d9862f0888dbdf670.tar.gz rust-ed3eee2e2a706d568f090f5d9862f0888dbdf670.zip | |
Optimize String::push_byte()
```
test new_push_byte ... bench: 6985 ns/iter (+/- 487) = 17 MB/s
test old_push_byte ... bench: 19335 ns/iter (+/- 1368) = 6 MB/s
```
```rust
extern crate test;
use test::Bencher;
static TEXT: &'static str = "\
Unicode est un standard informatique qui permet des échanges \
de textes dans différentes langues, à un niveau mondial.";
#[bench]
fn old_push_byte(bencher: &mut Bencher) {
bencher.bytes = TEXT.len() as u64;
bencher.iter(|| {
let mut new = String::new();
for b in TEXT.bytes() {
unsafe { new.as_mut_vec().push_all([b]) }
}
})
}
#[bench]
fn new_push_byte(bencher: &mut Bencher) {
bencher.bytes = TEXT.len() as u64;
bencher.iter(|| {
let mut new = String::new();
for b in TEXT.bytes() {
unsafe { new.as_mut_vec().push(b) }
}
})
}
```Diffstat (limited to 'src')
| -rw-r--r-- | src/libcollections/string.rs | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/libcollections/string.rs b/src/libcollections/string.rs index 936e60388a6..e1467d957d7 100644 --- a/src/libcollections/string.rs +++ b/src/libcollections/string.rs @@ -208,7 +208,7 @@ impl String { /// Appends a byte to this string buffer. The caller must preserve the valid UTF-8 property. #[inline] pub unsafe fn push_byte(&mut self, byte: u8) { - self.push_bytes([byte]) + self.vec.push(byte) } /// Removes the last byte from the string buffer and returns it. Returns `None` if this string |
