As noted by Billy, vec_validate would call vec_resize and then call memset() to
clear unused area to 0. This call is required to make sure, if vector is
expanded by vec_resize without having to allocate new memory, any unused memory
with stale content is cleared.
For new vectors, calling vect_new should be faster as vec_resize would call
vec_reszie_allocate_memory which would allocated memory and call memset() to
clear it. Thus, calling vec_validate() to create a new vector would end up
calling memset() twice to clear allocated vector memory.
Regards,
John
From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Chris Luke
Sent: Thursday, April 12, 2018 4:01 PM
To: Bly, Mike <m...@ciena.com>; vpp-dev@lists.fd.io
Subject: Re: [vpp-dev] vec_new() vs. vec_validate()
Vec_new always allocates storage, vec_validate ensures that an existing
allocation is at least a certain size, or create a new one if the pointer is
NULL. The latter is typically used when the storage will be used as an array
and you want to make sure it's large enough to store element N.
See
https://docs.fd.io/vpp/18.07/db/d65/vec_8h.html#a003a343880e8218b2398b72ae16c5163
and
https://docs.fd.io/vpp/18.07/db/d65/vec_8h.html#a3b2e25abfbea7eea806d37920ba769e3.
The other subtle difference is that you need to tell vec_new the type of the
elements in the array (so it knows the size) whereas vec_validate can glean
that from the type of the vector (possibly NULL) you pass in.
Chris.
From: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io>
<vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io>> On Behalf Of Bly, Mike
Sent: Thursday, April 12, 2018 15:30
To: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io>
Subject: [vpp-dev] vec_new() vs. vec_validate()
Hello,
After some digging, near as I can tell, for a new pointer to a new entity, it
would seem that vec_new() is pretty much providing the same results as
vec_validate(), albeit, with one less memset(bob, o, sizeof(*bob)) being
performed. However, I see a 10:1 usage (preference?) of vec_validate() vs.
vec_new() in the existing vpp src, so I was hoping someone could share some of
the "why" here as to when one should use either.
-Mike