What is the maximum number of parameters that a C# method can be defined as taking?

后端 未结 2 467
南方客
南方客 2020-12-10 00:19

I am trying to figure out what the maximum number of parameters a method in C# can have. I\'ve checked everywhere for an answer, including the C# official documentation, MSD

2条回答
  •  南方客
    南方客 (楼主)
    2020-12-10 01:06

    Here is your theoretical answer:

    In order to push method arguments onto the stack, compiled code has the following MSIL opcodes to choose from:

    ldarg.0

    ldarg.1

    ldarg.2

    ldarg.3

    ldarg.S

    ldarg

    ldarg.0 to ldarg.3 is used to push the first 4 method arguments onto the stack (including this as the first argument for instance methods).

    ldarg.S takes an 8 bit argument number, and so it can be used to push up to 256 arguments onto the stack.

    That leaves us with plain old ldarg, which can handle the most method arguments: it takes an unsigned 16 bit argument number. So the largest number of arguments that can be successfully compiled into valid MSIL is 2^16 = 65,536.

    As others have noted, however, there are various practical stack size limits that apply when actually trying to execute your method depending on the platform/architecture of the system. Based on rmiesen's answer, it looks like the current .NET implementation limits the maximum size of the stack at runtime to 2^14.

提交回复
热议问题