> From: Mattias Rönnblom [mailto:hof...@lysator.liu.se] > Sent: Sunday, 7 April 2024 11.32 > > 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.
The RFC fails to mention why we need to replace VLAs with something else: VLAs are C99, but not C++; VLAs were made optional in C11. MSVC doesn't support VLAs, and is not going to: https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/#variable-length-arrays I dislike alloca() too, and the notes section in the alloca(3) man page even discourages the use of alloca(): https://man7.org/linux/man-pages/man3/alloca.3.html But I guess alloca() is the simplest replacement for VLAs. This RFC patch series opens the discussion for alternatives in different use cases. > > > 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-roret...@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(-) > >