그래서 C 컴파일러의 하위 집합을 구현할 수 있으며 두통을 유발하는 기능이 하나 있습니다. 그래서 나는 그것을 해결하는 방법에 대한 아이디어를 원합니다.크기를 모르더라도 어셈블리에서 값으로 문자열 전달
내 프로그램에서 언어 문자열을 포함한 값으로 전달 된 모든 인수, 그의이 같은 선언은 다음과 같습니다
string str;
이 그리고 내 문제는 당신이 볼 수 있듯이, 내가 선언 (C에서 차이) 동안 문자열 크기를 모르는 것입니다, 그래서 어셈블리를 생성 할 때 스택에 얼마나 큰 공간을 만들지 모르겠다. 나는이 같은 코드가있는 경우 :
string str;
int number;
str = something;
을 내가 나중에 practicaly anythign 할당 할 수 있습니다 때, 문자열 str을위한 올바른 공간을 할당하는 방법을 모르겠어요. 마지막 조건은 힙을 사용할 수 없다는 것입니다.
감사합니다. 나쁜 영어로 죄송합니다.
편집 : 답변
감사합니다. 스택의 크기가 커지면 가장 큰 문제는 재 할당 문자열 일 것입니다.이 문자열 뒤에 뭔가가있는 경우 가장 간단한 해결책은 스택에 새로운 공간을 만들고 이전의 스택을 새로 만들 것이라고 생각하는 것입니다. 지역 범위가 폐기 될 때까지 ... 낭비 될 것입니다. 예 :
스택에 동적 배열을 할당하는 것은 비교적 간단합니다. 오프셋이 다양하기 때문에 일반적으로 기본 포인터가 필요합니다. alloca 및 C99 가변 길이 배열이 선택한 아키텍처에서 어떻게 구현되는지 살펴보십시오.까다로운 부분은 혼합 된 호출/데이터 스택에서 동적 문자열을 반환하는 것입니다. 후자의 문제에 대한 비교적 단순한 해결책은 피 호출자가 결과를 획득 할 것으로 예상되는 고정 리턴 버퍼 (예를 들어, 단일 값에 대한 제 2 "스택") 일 수있다. – doynax