[vm] Avoid a copy when deserializing typed data to Dart_CObject.

Address regressions in the FileIO_write_* benchmarks.

TEST=ci
Change-Id: I87e9ddffc92b7cbd82a5d37477e649bdca03818f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/208483
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index ae7a6ad..37bb767 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -1636,10 +1636,9 @@
       if (length == 0) {
         data->value.as_typed_data.values = NULL;
       } else {
-        const intptr_t length_in_bytes = length * element_size;
-        uint8_t* cdata = d->zone()->Alloc<uint8_t>(length_in_bytes);
-        data->value.as_typed_data.values = cdata;
-        d->ReadBytes(cdata, length_in_bytes);
+        data->value.as_typed_data.values =
+            const_cast<uint8_t*>(d->CurrentBufferAddress());
+        d->Advance(length * element_size);
       }
       d->AssignRef(data);
     }