여러 인수를 함수에 전달하는 가장 효율적인 방법은 무엇입니까?

데이브

많은 수의 사용자 입력 변수를 함수에 인수로 전달하고 여러 결과를 반환하는 가장 효율적인 방법 (처리 속도 및 메모리 활용 측면에서)은 무엇입니까?

함수를 호출 할 때마다 긴 인수 문자열과 반환 값 (예 : (a, b, c, d, e, f, g) = MyFunction (a, b, c, d, e, f, g)) 우아하지 않고 비효율적이라고 생각합니다. 특히 함수를 반복적으로 또는 재귀 적으로 호출해야하는 경우.

그러나 함수 외부에서 전체 변수 목록을 Global로 정의하는 것도 추악하며 내 프로그램이 커짐에 따라 변수 이름이 실수로 여러 변수에 할당 될 위험이 있습니다.

나는 모든 변수를 단일 배열 또는 목록에 넣고 단일 인수로 함수에 전달하려고 시도했습니다. 전체 배열 자체가 아니라 매번 함수에 전달되는 배열의 시작에 대한 포인터이기 때문에 거대한 배열의 경우에도 이것이 더 효율적이라고 생각하는 것이 맞습니까? 배열이 함수로 /로부터 많은 수의 변수를 전달하는 가장 좋은 방법 인 경우, 효율성을 어느 시점에서 절약 할 수 있습니까? 예를 들어 인수 수가 5 개 미만인 경우 인수 문자열을 전달하는 것이 좋습니다. 5 개 이상의 인수가 필요한 경우 배열 또는 목록을 사용합니까?

StackExchange에 대한 이전 논의 : 함수에 여러 인수를 전달하는 우아한 방법은 여러 인수를 전달하기 위해 벡터 / 배열 대신 구조체를 사용하는 것이 좋습니다. 이 방법이 배열을 사용하는 것보다 선호되는 이유는 무엇이며 효율성 절감이 struct 사용의 추가 복잡성을 정당화하는 지점은 무엇입니까?

Python 또는 C / C ++에서 작동하는 다른 방법을 고려해야합니까? (예 : 저는 객체 지향 프로그래밍을 처음 접했지만 이것이 Python에 특정한 솔루션을 제공 할 수 있는지 궁금하십니까?)

많은 감사

룬딘

이 모든 것은 대상 시스템과 함수에 대한 호출 규칙에 따라 다릅니다. 이 답변은 C 및 C ++에만 적용됩니다.

일반적으로 파일 범위 변수를 사용하는 것이 가장 빠릅니다. 이러한 경우 변수는 전역 (전체 프로젝트에서 액세스 가능)으로 선언되어서는 안되며 정적 (로컬 파일에서만 액세스 가능)으로 선언되어야합니다.

그럼에도 불구하고 이러한 정적 파일 범위 변수는 몇 가지 이유로 피해야합니다. 코드를 읽고 유지하기 어렵게 만들 수 있고, 무분별한 사용으로 인해 "스파게티 코드"가 발생할 수 있으며, 재진입 문제가 발생할 수 있으며 일부 추가 식별자를 파일 범위 네임 스페이스.

매개 변수의 수가 제한되어있는 경우 컴파일러가 이들 중 일부를 스택에 저장하는 대신 CPU 레지스터에 저장할 수 있으므로 매개 변수를 별도의 매개 변수로 유지하면 성능이 향상 될 수 있습니다. CPU 레지스터는 매개 변수를 함수에 전달하는 가장 빠른 방법입니다. 작동 방식은 매우 시스템에 따라 다릅니다. 그러나 CPU 레지스터를 통해 매개 변수를 전달하려는 방식으로 프로그램을 작성하는 것은 대부분의 경우 조기 최적화입니다.

실제로 여러 인수를 전달하는 가장 좋은 방법은 모든 인수를 포함하는 사용자 지정 구조체 (또는 C ++ 클래스)를 만드는 것입니다. 그런 다음이 구조는 함수에 대한 참조로 전달됩니다. 구조체가 서로 관련된 변수 만 포함하도록 만드십시오. 서로 관련이 없거나 하나의 함수에만 특수한 변수를 별도의 매개 변수에 넣는 것을 고려하십시오. 좋은 프로그램 디자인은 대부분의 경우 효율성을 대체합니다.

구조체 / 클래스가 배열 대신 선호되는 이유는 변수가 함께 고유 한 유형을 형성하기 때문일뿐만 아니라 서로 다른 유형을 가질 가능성이 있기 때문입니다. 모두 다른 유형을 가진 변수 배열을 만드는 것은 의미가 없습니다.

그리고 C ++에서 클래스는 생성자 및 소멸자, 사용자 지정 할당 연산자 등과 같은 배열에 비해 다른 이점을 제공합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

R의 문자열 벡터에 여러 함수를 매핑하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

여러 XML 파일에서 두 노드를 읽는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

MATLAB에서 여러 .JPG 파일을 읽는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

docplex python API를 사용하여 새 변수를 추가하는 효율적인 방법은 무엇입니까?

분류에서Dev

여러 저장소에서 github 워크 플로를 공유하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

여러 개의 정렬 된 실행을 포함하는 파일에서 행을 검색하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

여러 개의 정렬 된 실행을 포함하는 파일에서 행을 검색하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

여러 y = mx + b 방정식을 결합하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

여러 기호 인수를 함수에 간결하게 전달하는 방법은 무엇입니까?

분류에서Dev

C ++ 템플릿 함수에 여러 인수를 전달하는 방법은 무엇입니까?

분류에서Dev

null 값으로 집계를 수행하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

DataTable 열의 총 수를 계산하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

정수의 순환 합계를 얻는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

버전에 대한 스위치가있는 Get / Set을 사용하여 속성을 정의하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

버전에 대한 스위치가있는 Get / Set을 사용하여 속성을 정의하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

Java, 여러 속성으로 데이터를 저장하는 효율적인 방법은 무엇입니까?

분류에서Dev

Python의 클래스 메서드에서 여러 값을 반환하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

Entity Framework를 사용하여 SQL에 많은 열이있는 모델을 추가하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

사전 목록에서 값을 편집하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

JS : 반복하여 결과를 필터링하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

페이지에서 요소를 완전히 숨기는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

스택과 큐를 함께 구현하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

완전히 별개의 두 가지를 grep하고 값을 별도의 변수에 할당하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

완전히 별개의 두 가지를 grep하고 값을 별도의 변수에 할당하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

좌표의 2D ndarray에서 함수를 호출하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

gltf 파일에 법선을 저장하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

다변량 삼각 함수를 scipy와 수치 적으로 통합하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

함수에 전달 된 여러 인수 (...)의 이름을 캡처하는 방법은 무엇입니까?

분류에서Dev

|를 사용하여 Ruby 메소드에 여러 인수를 전달하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    R의 문자열 벡터에 여러 함수를 매핑하는 가장 효율적인 방법은 무엇입니까?

  2. 2

    여러 XML 파일에서 두 노드를 읽는 가장 효율적인 방법은 무엇입니까?

  3. 3

    MATLAB에서 여러 .JPG 파일을 읽는 가장 효율적인 방법은 무엇입니까?

  4. 4

    docplex python API를 사용하여 새 변수를 추가하는 효율적인 방법은 무엇입니까?

  5. 5

    여러 저장소에서 github 워크 플로를 공유하는 가장 효율적인 방법은 무엇입니까?

  6. 6

    여러 개의 정렬 된 실행을 포함하는 파일에서 행을 검색하는 가장 효율적인 방법은 무엇입니까?

  7. 7

    여러 개의 정렬 된 실행을 포함하는 파일에서 행을 검색하는 가장 효율적인 방법은 무엇입니까?

  8. 8

    여러 y = mx + b 방정식을 결합하는 가장 효율적인 방법은 무엇입니까?

  9. 9

    여러 기호 인수를 함수에 간결하게 전달하는 방법은 무엇입니까?

  10. 10

    C ++ 템플릿 함수에 여러 인수를 전달하는 방법은 무엇입니까?

  11. 11

    null 값으로 집계를 수행하는 가장 효율적인 방법은 무엇입니까?

  12. 12

    DataTable 열의 총 수를 계산하는 가장 효율적인 방법은 무엇입니까?

  13. 13

    정수의 순환 합계를 얻는 가장 효율적인 방법은 무엇입니까?

  14. 14

    버전에 대한 스위치가있는 Get / Set을 사용하여 속성을 정의하는 가장 효율적인 방법은 무엇입니까?

  15. 15

    버전에 대한 스위치가있는 Get / Set을 사용하여 속성을 정의하는 가장 효율적인 방법은 무엇입니까?

  16. 16

    Java, 여러 속성으로 데이터를 저장하는 효율적인 방법은 무엇입니까?

  17. 17

    Python의 클래스 메서드에서 여러 값을 반환하는 가장 효율적인 방법은 무엇입니까?

  18. 18

    Entity Framework를 사용하여 SQL에 많은 열이있는 모델을 추가하는 가장 효율적인 방법은 무엇입니까?

  19. 19

    사전 목록에서 값을 편집하는 가장 효율적인 방법은 무엇입니까?

  20. 20

    JS : 반복하여 결과를 필터링하는 가장 효율적인 방법은 무엇입니까?

  21. 21

    페이지에서 요소를 완전히 숨기는 가장 효율적인 방법은 무엇입니까?

  22. 22

    스택과 큐를 함께 구현하는 가장 효율적인 방법은 무엇입니까?

  23. 23

    완전히 별개의 두 가지를 grep하고 값을 별도의 변수에 할당하는 가장 효율적인 방법은 무엇입니까?

  24. 24

    완전히 별개의 두 가지를 grep하고 값을 별도의 변수에 할당하는 가장 효율적인 방법은 무엇입니까?

  25. 25

    좌표의 2D ndarray에서 함수를 호출하는 가장 효율적인 방법은 무엇입니까?

  26. 26

    gltf 파일에 법선을 저장하는 가장 효율적인 방법은 무엇입니까?

  27. 27

    다변량 삼각 함수를 scipy와 수치 적으로 통합하는 가장 효율적인 방법은 무엇입니까?

  28. 28

    함수에 전달 된 여러 인수 (...)의 이름을 캡처하는 방법은 무엇입니까?

  29. 29

    |를 사용하여 Ruby 메소드에 여러 인수를 전달하는 방법은 무엇입니까?

뜨겁다태그

보관