레거시 응용 프로그램과 함께 사용하기 위해 ADO/ODBC를 사용하여 데이터베이스 액세스를위한 다중 스레드 DLL을 작성했습니다. 각 스레드마다 여러 개의 데이터베이스 연결을 유지해야하므로 객체의 각 연결에 대한 ADO 객체를 배치하고 사용자 정의 threadInfo 객체 내부에 배열을 유지하려고합니다. 분명히 여기서 벡터가 더 잘 작동 할 것입니다. 이동 중에도 오브젝트를 삭제/재배치해야하며 벡터는이를 단순화 할 것입니다. 문제는 각 스레드에 힙을 할당하여 힙 경합을 피하고 거기에서 모든 메모리를 할당하는 것입니다.메모리 풀을 사용하는 클래스에서 C++ 벡터를 멤버로 사용
그럼 내 질문은 : 벡터를 스레드 별 힙에서 할당하도록하려면 어떻게해야합니까? (또는 래퍼 클래스와 같은 힙에서 메모리를 할당한다는 것은 내부적으로 알 수 있습니다. 소리는 거의 발생하지 않지만 C++ 사람이 아닙니다.) 저는 조금 봤는데 할당 자나 무언가를 써야 할 것처럼 보입니다. 내가 원치 않는 일들이 너무 많아 보인다. 다른 방법이 있습니까? 나는 벡터 내부에있는 모든 것들을 위해 새로운 배치를 사용한다고 들었습니다. 그래서 연산자 new에 과부하가 걸릴 수 있습니까?
C++의 내면에 대한 지식이 부족하여 필자가 주로 C 프로그래머 (심지어 상대적으로) 인 것처럼 보입니다. 어딘가 초보적인 것을 놓칠 수있는 가능성이 아주 있습니다. 더 쉬운 일이 생기지 않는다면, 나는 그 배열의 일을 그냥 할 수도 있지만, 그 일은 일어나지 않을 것입니다.
저는 MS-VC++ 6.0을 사용하고 있습니다. (헤이, 웃기 싫어! :-P).
모든/모든 도움을 많이 주시면 감사하겠습니다.
예, 전에이 문제를 겪었습니다. 솔직히 그들은 "새로운 코드를 오버로드하기 위해 이것을 사용하지 마십시오. 정상적인 코드에서 할당자를 사용할 이유가 없습니다." 다시 한번 확인해보십시오. 벡터의 개체는 특정 힙을 사용합니다. 예. 나는 이미 그것을 확신했다. basic_string의 템플릿에 대해 몰랐습니다. 감사합니다! (벡터를 제외하고는 모든 멤버를 프리미티브로 유지하는 데주의를 기울였습니다.) 한편 다른 응답이 나타나는지 기다리는 중! –
@ Deep-B : 특수 힙에 객체를 놓아야한다는 것이 더 이상 "정상적인 코드"로 간주되지 않으므로 귀하의 경우에는 아무런 논점이 없습니다. ':)'C++의 문자열의 경우 : 표준 라이브러리의 ''헤더의'typedef basic_string string' (namspace'std' 또는 course 내)이 있습니다. 'std :: basic_string'에는 기본값이'std :: char_traits '과'std :: allocator ' 두 개의 템플릿 매개 변수가 더 있습니다. 'typedef std :: basic_string , my_allocator > my_string_type'이라면 자신 만의 힙을 사용하면서'std :: string'과 비슷한 것을 얻을 수 있습니다. –
sbi