Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7488151
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 29, 20262026-05-29T14:45:50+00:00 2026-05-29T14:45:50+00:00

I don’t have a background in C or C++, so static arrays puzzle me

  • 0

I don’t have a background in C or C++, so static arrays puzzle me a little. What are they for? Why are they allocated on the stack?

I imagine there’s a performance benefit. Stack allocation is faster and there’s no need for garbage collection. But why does the length need to be known at compile time? Couldn’t you create a fixed-size array at runtime and allocate it on the stack?

Dynamic arays or slices in D are represented by a struct that contains a pointer and a length property. Is the same true for static arrays? How are they represented?

If you pass them to a function, they are copied in their entirety (unless you use ref), what is the rationale behind that?

I realize that dynamic arrays and slices are much more imprtant in D than static arrays, that’s why the documentation doesn’t dwell on them very long, but I’d still like to have a bit more background. I guess the peculiarities of static arrays have to do with how stack allocation works.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-29T14:45:52+00:00Added an answer on May 29, 2026 at 2:45 pm

    static arrays hail from the C language where calls to (the slow) alloc were discouraged to the extreme because of memory leaks (when you forgot to free the allocated array), double freeing (as a result of…), dangling pointers (all dangers of manual memory management that can be avoided with GC)

    this meant that constructs such as

    int foo(char* inp){
        char[80] buff;
        strcpy(inp,buff);//don't do this this is a invite for a buffer overflow
        //...
        return 1;
    } 
    

    were common instead of the alloc/free calls where you need to be sure everything you allocated was freed exactly once over the course of the program

    technically you CAN dynamically allocate on the stack (using assembly if you want to) however this can cause some issues with the code as the length will only be known at runtime and lessen possible optimization that the compiler may apply (unrolling an iteration over it for example)

    static arrays are mostly used for buffers because of the fast allocation possible on the stack

    ubyte[1024] buff=void;//assigning void avoids the initializer for each element cause we are writing to it first thing anyway
    ubyte[] b;
    while((b=f.rawRead(buff[])).length>0){
         //...
    }
    

    they can implicitly convert to a slice of the array (or explicitly with the slice operator []) so you can use them near interchangeably with normal dynamic arrays

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Don't they both have to convert to machine code at some point to execute
Don't overthink this - there's a very commonly used term and I ... have
Don't know how to google for such, but is there a way to query
(Don't know if this is strictly on-topic, but I don't see any better Stack
Don't you hate it when you have class Foobar { public: Something& getSomething(int index)
Don't have much to say, just can get into the event handler. XAML: <Grid>
Don't think my virtualhost is working correctly. This is what I have inside of
Don't ask why but I have the requirement to draw a border around certain
Don't ask why, but is there any way to suppress a failed linking error?
Don't know if it's I'm doing it wrong or if there's a bug (I

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.