> On 23 Sep 2016, at 19:41, Quinn The Eskimo! via swift-users
> <[email protected]> wrote:
>
>
> On 23 Sep 2016, at 11:29, Gerriet M. Denkmann via swift-users
> <[email protected]> wrote:
>
>> What about calloc then? Or use allocate and do a memset afterwards?
>
> For trivial data types (like UInt8) this will work, but if you want to follow
> the rules I recommend reading the following:
>
> * UnsafeRawPointer Migration
>
> <https://swift.org/migration-guide/se-0107-migrate.html>
>
> * SE-0107 “UnsafeRawPointer API”
>
> <https://github.com/apple/swift-evolution/blob/master/proposals/0107-unsaferawpointer.md>
>
> Spoiler: that’ll point you to `initialize(to:count:)` (-:
Thanks for the links.
By the way: I had already tried to use `initialize(to:count:)` before, but I
used it as a replacement of allocate, which the compiler did not really like.
Since reading these documents I know that I have to use it after allocate, not
instead of.
In dealloc I had before:
free( bitfield )
which, to my surprise, the compiler did NOT warn about (should there be a
warning?)
I have since replace this with:
bitfield.deallocate(capacity: numberUsedInAllocate )
> * * *
>
> Also, why are you manually allocating this rather than using [UInt8]? The
> latter is easier, safer, and likely to have similar levels of efficiency.
I just tried this: [UInt8] turns out to be nearly 10% slower compared to:
UnsafeMutablePointer<UInt8>.allocate(capacity:).
Probably depends on the use case, whether 10% less performance is worth the
easier and safer.
I am trying to compare Swift to ObjC classes (which use malloc), so it would
not be a fair comparison if the Swift class has to use an UInt8 array.
Kind regards,
Gerriet.
_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users