@@ -4217,6 +4217,7 @@ mod bench {
4217
4217
use vec;
4218
4218
use vec:: VectorVector ;
4219
4219
use option:: * ;
4220
+ use ptr;
4220
4221
4221
4222
#[ bench]
4222
4223
fn iterator ( bh : & mut BenchHarness ) {
@@ -4339,4 +4340,58 @@ mod bench {
4339
4340
vec. contains ( & 99 u) ;
4340
4341
} )
4341
4342
}
4343
+
4344
+ #[ bench]
4345
+ fn zero_1kb_from_elem ( bh : & mut BenchHarness ) {
4346
+ bh. iter ( || {
4347
+ let _v: ~[ u8 ] = vec:: from_elem ( 1024 , 0u8 ) ;
4348
+ } ) ;
4349
+ }
4350
+
4351
+ #[ bench]
4352
+ fn zero_1kb_set_memory ( bh : & mut BenchHarness ) {
4353
+ bh. iter ( || {
4354
+ let mut v: ~[ u8 ] = vec:: with_capacity ( 1024 ) ;
4355
+ unsafe {
4356
+ let vp = vec:: raw:: to_mut_ptr ( v) ;
4357
+ ptr:: set_memory ( vp, 0 , 1024 ) ;
4358
+ vec:: raw:: set_len ( & mut v, 1024 ) ;
4359
+ }
4360
+ } ) ;
4361
+ }
4362
+
4363
+ #[ bench]
4364
+ fn zero_1kb_fixed_repeat ( bh : & mut BenchHarness ) {
4365
+ bh. iter ( || {
4366
+ let _v: ~[ u8 ] = ~[ 0u8 , ..1024 ] ;
4367
+ } ) ;
4368
+ }
4369
+
4370
+ #[ bench]
4371
+ fn zero_1kb_loop_set ( bh : & mut BenchHarness ) {
4372
+ // Slower because the { len, cap, [0 x T] }* repr allows a pointer to the length
4373
+ // field to be aliased (in theory) and prevents LLVM from optimizing loads away.
4374
+ bh. iter ( || {
4375
+ let mut v: ~[ u8 ] = vec:: with_capacity ( 1024 ) ;
4376
+ unsafe {
4377
+ vec:: raw:: set_len ( & mut v, 1024 ) ;
4378
+ }
4379
+ for i in range ( 0 , 1024 ) {
4380
+ v[ i] = 0 ;
4381
+ }
4382
+ } ) ;
4383
+ }
4384
+
4385
+ #[ bench]
4386
+ fn zero_1kb_mut_iter ( bh : & mut BenchHarness ) {
4387
+ bh. iter ( || {
4388
+ let mut v: ~[ u8 ] = vec:: with_capacity ( 1024 ) ;
4389
+ unsafe {
4390
+ vec:: raw:: set_len ( & mut v, 1024 ) ;
4391
+ }
4392
+ for x in v. mut_iter ( ) {
4393
+ * x = 0 ;
4394
+ }
4395
+ } ) ;
4396
+ }
4342
4397
}
0 commit comments