많은 수의 사용자 입력 변수를 함수에 인수로 전달하고 여러 결과를 반환하는 가장 효율적인 방법 (처리 속도 및 메모리 활용 측면에서)은 무엇입니까?
함수를 호출 할 때마다 긴 인수 문자열과 반환 값 (예 : (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] 삭제
몇 마디 만하겠습니다