[PATCH 0/4] RFC samples converting VLA to alloca
Mattias Rönnblom
hofors at lysator.liu.se
Sun Apr 7 11:31:48 CEST 2024
On 2024-04-04 19:15, Tyler Retzlaff wrote:
> This series is not intended for merge. It insteat provides examples of
> converting use of VLAs to alloca() would look like.
>
> what's the advantages of VLA over alloca()?
>
> * sizeof(array) works as expected.
>
> * multi-dimensional arrays are still arrays instead of pointers to
> dynamically allocated space. this means multiple subscript syntax
> works (unlike on a pointer) and calculation of addresses into allocated
> space in ascending order is performed by the compiler instead of manually.
>
alloca() is a pretty obscure mechanism, and also not a part of the C
standard. VLAs are C99, and well-known and understood, and very efficient.
> what's the disadvantage of VLA over alloca()?
>
> * VLA generation is subtl/implicit, there do appear to be places where
> a VLA is being used where it perhaps was not intended but it is hard
> to spot. e.g. hotpath rte_mbuf *array[burst_size]; where burst_size
> is not a constant expression, e.g. unintended in other syntax positions
> that are not intuitive, see patchwork link.
>
> https://patchwork.dpdk.org/project/dpdk/patch/1699896038-28106-1-git-send-email-roretzla@linux.microsoft.com/
>
> for the above reasons i'd recommend only converting to alloca() where
> necessary (msvc has to compile it) and for the other instances leave
> them as they are.
>
> Tyler Retzlaff (4):
> latencystats: use alloca instead of vla trivial
> hash: use alloca instead of vla trivial
> vhost: use alloca instead of vla sizeof
> dispatcher: use alloca instead of vla multi dimensional
>
> lib/dispatcher/rte_dispatcher.c | 6 +++---
> lib/hash/rte_thash.c | 2 +-
> lib/latencystats/rte_latencystats.c | 2 +-
> lib/vhost/socket.c | 5 +++--
> 4 files changed, 8 insertions(+), 7 deletions(-)
>
More information about the dev
mailing list